這 9 個 Java 開源項目 yyds
點擊上方“碼農(nóng)突圍”,馬上關(guān)注
這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包 真愛,請設(shè)置“星標(biāo)”或點個“在看
1. Sa-Token
// 在登錄時寫入當(dāng)前會話的賬號id
StpUtil.login(10001);
// 然后在需要校驗登錄處調(diào)用以下方法:
// 如果當(dāng)前會話未登錄,這句代碼會拋出 `NotLoginException` 異常
StpUtil.checkLogin();
@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public?String?insert(SysUser user) {
// ...
return?"用戶增加";
}
// 使賬號id為 10001 的會話強(qiáng)制注銷登錄
StpUtil.logoutByLoginId(10001);
StpUtil.login(10001);?// 標(biāo)記當(dāng)前會話登錄的賬號id
StpUtil.getLoginId();?// 獲取當(dāng)前會話登錄的賬號id
StpUtil.isLogin();?// 獲取當(dāng)前會話是否已經(jīng)登錄, 返回true或false
StpUtil.logout();?// 當(dāng)前會話注銷登錄
StpUtil.logoutByLoginId(10001);?// 讓賬號為10001的會話注銷登錄(踢人下線)
StpUtil.hasRole("super-admin");?// 查詢當(dāng)前賬號是否含有指定角色標(biāo)識, 返回true或false
StpUtil.hasPermission("user:add");?// 查詢當(dāng)前賬號是否含有指定權(quán)限, 返回true或false
StpUtil.getSession();?// 獲取當(dāng)前賬號id的Session
StpUtil.getSessionByLoginId(10001);?// 獲取賬號id為10001的Session
StpUtil.getTokenValueByLoginId(10001);?// 獲取賬號id為10001的token令牌值
StpUtil.login(10001,?"PC");?// 指定設(shè)備標(biāo)識登錄,常用于“同端互斥登錄”
StpUtil.logoutByLoginId(10001,?"PC");?// 指定設(shè)備標(biāo)識進(jìn)行強(qiáng)制注銷 (不同端不受影響)
StpUtil.openSafe(120);?// 在當(dāng)前會話開啟二級認(rèn)證,有效期為120秒
StpUtil.checkSafe();?// 校驗當(dāng)前會話是否處于二級認(rèn)證有效期內(nèi),校驗失敗會拋出異常
StpUtil.switchTo(10044);?// 將當(dāng)前會話身份臨時切換為其它賬號

/**
?* 高德地圖服務(wù)客戶端接口
?*/
@BaseRequest(baseURL =?"http://ditu.amap.com")
public?interface?Amap {
/**
?????* 根據(jù)經(jīng)緯度獲取詳細(xì)地址
?????* @param longitude 經(jīng)度
?????* @param latitude 緯度
?????* @return 詳細(xì)地址信息
?????*/
@Get("/service/regeo")
????Map getLocation(@Query("longitude")?String?longitude,?@Query("latitude")?String?latitude);
}
......
Amap amap = Forest.client(Amap.class);
// 發(fā)送請求查詢經(jīng)緯度
Map locationInfo = amap.getLocation("32.1242832",?"56.3290434");
// 直接將 MyUserInfo 轉(zhuǎn)換成 JSON
// 將服務(wù)端響應(yīng)返回的 JSON 數(shù)據(jù)轉(zhuǎn)換成 Result類對象
@Post("http://localhost:8080/user")
ResultcreateUser(@JSONBody?MyUserInfo user);
3. LiteFlow

//這里普通組件
@LiteflowComponent(id =?"a", name =?"組件A描述")
public?class?ACmp?extends?NodeComponent?{
@Override
public?void?process()?{
//do your business
????}
}
//這是條件組件
@LiteflowComponent(id =?"b", name =?"組件B描述")
public?class?BCondCmp?extends?NodeCondComponent?{
@Override
public?String?processCond()?{
//do your business
return?"e";
????}
}
xml version="1.0"?encoding="UTF-8"?>
<flow>
<chain?name="chain1">
<then?value="a,b(c|d|e)"/>?
<then?value="sub_chain"/>?
chain>
<chain?name="sub_chain">
<when?value="f,g,h"/>?
<then?value="j,k"?/>?
chain>
flow>
@LiteflowComponent(id =?"a", name =?"組件A描述")
public?class?ACmp?extends?NodeComponent?{
@Override
public?void?process()?{
????????Slot slot =?this.getSlot();
//通過對slot的getData,setData,或者存取你自己擴(kuò)展的slot屬性
????}
}
xml version="1.0"?encoding="UTF-8"?>
<flow>
<nodes>
<node?id="s1"?name="普通腳本"?type="script">
????????????????????????????def a=3;
????????????????def b=2;
????????????????slot.setData("s1",a*b);
????????????]]>
node>
<node?id="s2"?name="條件腳本"?type="cond_script">
????????????????????????????count = slot.getData("count");
????????????????if(count > 100){
????????????????????return "a";
????????????????}else{
????????????????????return "b";
????????????????}
????????????]]>
node>
nodes>
<chain?name="chain1">
<then?value="a,b,c,s1"/>
chain>
<chain?name="chain2">
<then?value="d,s2(a|b)"/>
chain>
flow>
4. JPom

創(chuàng)建、修改、刪除項目、Jar 包管理; 實時查看控制臺日志、備份日志、刪除日志、導(dǎo)出日志; 在線構(gòu)建項目發(fā)布項目一鍵搞定; 多節(jié)點管理、多節(jié)點自動分發(fā); 在線 SSH 終端,并且有終端日志和禁用命令; 實時監(jiān)控項目狀態(tài)異常自動報警; CPU、內(nèi)存監(jiān)控、導(dǎo)出堆棧信息、查看項目進(jìn)程端口、服務(wù)器狀態(tài)監(jiān)控; 多用戶管理,用戶項目權(quán)限獨立(上傳、刪除權(quán)限可控制),完善的操作日志; 系統(tǒng)路徑白名單模式,杜絕用戶誤操作系統(tǒng)文件; 在線管理 Nginx 配置文件、SSL 證書文件。
yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Agent
備用地址 yum install -y?wget && wget -O install.sh?https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh?&& bash install.sh?Agent
支持自動安裝 JDK 環(huán)境 yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Agent jdk
yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Server
備用地址 yum install -y?wget && wget -O install.sh?https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh?&& bash install.sh?Server
支持自動安裝 JDK 環(huán)境。 yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Server jdk
支持自動安裝 JDK 和 Maven 環(huán)境。 yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Server jdk+mvn
5. Cubic

兼容性:整體監(jiān)控不管你是 IDC、ECS、Docker 部署,都可完美兼容; 易用:無需任何配置,開箱即用,基于 agent 無侵入接入,升級應(yīng)用端無感知; 強(qiáng)大:支持對應(yīng)用的基礎(chǔ)監(jiān)控、堆棧監(jiān)控、線程池監(jiān)控等等; 高擴(kuò)展:提供良好的擴(kuò)展接口,給你自主選擇。









6. Sureness

于是乎 Sureness 誕生了,我們希望能解決這些問題。提供一個面向 REST API、無框架依賴、可以動態(tài)修改權(quán)限、多認(rèn)證策略、更快速度、易用易擴(kuò)展的認(rèn)證鑒權(quán)框架。
面向 REST API 的認(rèn)證鑒權(quán),基于 RBAC(用戶-角色-資源)主要關(guān)注于對 API 的安全保護(hù)。無特定 Web 框架依賴,開箱即用(已有 SpringBoot、Quarkus、Javalin、Ktor、Micronaut、Jfinal、Solon 等集成樣例); 支持動態(tài)修改權(quán)限配置(動態(tài)修改配置每個?API 的訪問權(quán)限)
支持 Websocket 、主流 HTTP 容器 Servlet、JAX-RS、Spring Reactive;支持多種認(rèn)證策略 JWT、Basic Auth、Digest Auth ... 可擴(kuò)展自定義認(rèn)證方式; 基于改進(jìn)的字典匹配樹擁有的高性能; 良好的擴(kuò)展接口、樣例和文檔,幫助急速理解、擴(kuò)展與使用 Sureness 的低配置; 易擴(kuò)展,不耦合其他框架,希望能對系統(tǒng)多場景快速安全的保護(hù)。


[x] Sureness 集成 Spring Boot 樣例(配置文件方案)sample-bootstrap [x] Sureness 集成 Spring Boot 樣例(數(shù)據(jù)庫方案)sample-tom [x] Sureness 集成 Quarkus 樣例 sample-quarkus [x] Sureness 集成 Javalin 樣例 sample-javalin [x] Sureness 集成 Ktor 樣例 sample-ktor [x] Sureness 集成 Spring Webflux 樣例 sample-spring-webflux [x] Sureness 集成 Micronau t樣例 sample-micronaut [x] Sureness 集成 MicroProfile 樣例 sample-microProfile [x] Sureness 集成 Jfinal 樣例 sample-jfinal [x] Sureness 集成 Solon 樣例 sample-solon [x] Sureness 集成 Spring Gateway 樣例 sample-spring-gateway [x] Sureness 集成 Zuul 樣例 sample-zuul [x] Sureness 集成 Session 樣例 sureness-session [x] Sureness 集成分布式緩存 Session 樣例 sureness-redis-session [x] More samples todo
7. TLog

通過對日志打標(biāo)簽完成輕量級微服務(wù)日志追蹤; 提供三種接入方式:javaagent 完全無侵入接入,字節(jié)碼一行代碼接入,基于配置文件的接入; 對業(yè)務(wù)代碼無侵入式設(shè)計。使用簡單,10 分鐘即可接入; 支持常見的 log4j、log4j2、logback 三大日志框架,并提供自動檢測,完成適配; 支持 Dubbo、Dubbox、Spring Cloud 三大 RPC 框架; 支持 Spring Cloud Gateway 和 Soul 網(wǎng)關(guān); 適配 HttpClient 和 Okhttp 的 HTTP 調(diào)用標(biāo)簽傳遞; 支持三種任務(wù)框架,JDK 的 TimerTask、Quartz、XXL-JOB; 支持日志標(biāo)簽的自定義模板的配置,提供多個系統(tǒng)級埋點標(biāo)簽的選擇; 支持異步線程的追蹤,包括線程池,多級異步線程等場景; 幾乎無性能損耗,快速穩(wěn)定。經(jīng)過壓測,損耗在0.01%。




public?void?simpleDemo() throws Exception?{
//合成器
????????ImageCombiner combiner =?new?ImageCombiner("http://xxx.com/image/bg.jpg", OutputFormat.JPG);
//加圖片元素
????????combiner.addImageElement("http://xxx.com/image/product.png",?0,?300)
????????????.setAlpha(.8?f)?//透明度(0.0~1.0)
????????????.setRotate(45)?//旋轉(zhuǎn)(0~360)
????????????.setBlur(20);?//高斯模糊(1~100);
//加文本元素
????????combiner.addTextElement("周末大放送",?0,?150,?1400)
????????????.setCenter(true)?//居中繪制(會忽略x坐標(biāo),改為自動計算)
????????????.setColor(Color.Red)?//顏色
//執(zhí)行圖片合并
????????combiner.combine();
//可以獲取流(并上傳oss等)
????????InputStream?is?= combiner.getCombinedImageStream();
//也可以保存到本地
????????combiner.save("d://image.jpg");
9. MaxKey



提供標(biāo)準(zhǔn)的認(rèn)證接口以便于其他應(yīng)用集成?SSO,安全的移動接入,安全的 API、第三方認(rèn)證和互聯(lián)網(wǎng)認(rèn)證的整合; 提供用戶生命周期管理,支持 SCIM 2 協(xié)議,基于 Apache Kafka 代理,通過連接器(Connector)實現(xiàn)身份供給同步; 認(rèn)證中心具有平臺無關(guān)性、環(huán)境多樣性。支持 Web、手機(jī)、移動設(shè)備等。如 Apple iOS、Andriod 等。將認(rèn)證能力從 B/S 到移動應(yīng)用全面覆蓋; 多種認(rèn)證機(jī)制并存,各應(yīng)用系統(tǒng)可保留原有認(rèn)證機(jī)制,同時集成認(rèn)證中心的認(rèn)證;應(yīng)用具有高度獨立性,不依賴認(rèn)證中心,又可用使用認(rèn)證中心的認(rèn)證,實現(xiàn)單點登錄; 基于 Java EE 平臺,采用 Spring、MySQL、Tomcat、Redis、Apache Kafka 等開源技術(shù),微服務(wù)架構(gòu),擴(kuò)展性強(qiáng); 開源、安全、自主可控,許可證 Apache 2.0 License & MaxKey 版權(quán)聲明。




最后
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?面試題?資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!
面試題】即可獲取評論
圖片
表情


