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

/**
?* 高德地圖服務(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ā)送請(qǐng)求查詢經(jīng)緯度
Map locationInfo = amap.getLocation("32.1242832",?"56.3290434");
// 直接將 MyUserInfo 轉(zhuǎn)換成 JSON
// 將服務(wù)端響應(yīng)返回的 JSON 數(shù)據(jù)轉(zhuǎn)換成 Result類對(duì)象
@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();
//通過(guò)對(duì)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)建、修改、刪除項(xiàng)目、Jar 包管理; 實(shí)時(shí)查看控制臺(tái)日志、備份日志、刪除日志、導(dǎo)出日志; 在線構(gòu)建項(xiàng)目發(fā)布項(xiàng)目一鍵搞定; 多節(jié)點(diǎn)管理、多節(jié)點(diǎn)自動(dòng)分發(fā); 在線 SSH 終端,并且有終端日志和禁用命令; 實(shí)時(shí)監(jiān)控項(xiàng)目狀態(tài)異常自動(dòng)報(bào)警; CPU、內(nèi)存監(jiān)控、導(dǎo)出堆棧信息、查看項(xiàng)目進(jìn)程端口、服務(wù)器狀態(tài)監(jiān)控; 多用戶管理,用戶項(xiàng)目權(quán)限獨(dú)立(上傳、刪除權(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
支持自動(dòng)安裝 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
支持自動(dòng)安裝 JDK 環(huán)境。 yum install -y?wget && wget -O install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&& bash install.sh?Server jdk
支持自動(dòng)安裝 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 部署,都可完美兼容; 易用:無(wú)需任何配置,開箱即用,基于 agent 無(wú)侵入接入,升級(jí)應(yīng)用端無(wú)感知; 強(qiáng)大:支持對(duì)應(yīng)用的基礎(chǔ)監(jiān)控、堆棧監(jiān)控、線程池監(jiān)控等等; 高擴(kuò)展:提供良好的擴(kuò)展接口,給你自主選擇。









6. Sureness

于是乎 Sureness 誕生了,我們希望能解決這些問(wèn)題。提供一個(gè)面向 REST API、無(wú)框架依賴、可以動(dòng)態(tài)修改權(quán)限、多認(rèn)證策略、更快速度、易用易擴(kuò)展的認(rèn)證鑒權(quán)框架。
面向 REST API 的認(rèn)證鑒權(quán),基于 RBAC(用戶-角色-資源)主要關(guān)注于對(duì) API 的安全保護(hù)。無(wú)特定 Web 框架依賴,開箱即用(已有 SpringBoot、Quarkus、Javalin、Ktor、Micronaut、Jfinal、Solon 等集成樣例); 支持動(dòng)態(tài)修改權(quán)限配置(動(dòng)態(tài)修改配置每個(gè)?API 的訪問(wèn)權(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ò)展,不耦合其他框架,希望能對(duì)系統(tǒng)多場(chǎng)景快速安全的保護(hù)。


[x] Sureness 集成 Spring Boot 樣例(配置文件方案)sample-bootstrap [x] Sureness 集成 Spring Boot 樣例(數(shù)據(jù)庫(kù)方案)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

通過(guò)對(duì)日志打標(biāo)簽完成輕量級(jí)微服務(wù)日志追蹤; 提供三種接入方式:javaagent 完全無(wú)侵入接入,字節(jié)碼一行代碼接入,基于配置文件的接入; 對(duì)業(yè)務(wù)代碼無(wú)侵入式設(shè)計(jì)。使用簡(jiǎn)單,10 分鐘即可接入; 支持常見的 log4j、log4j2、logback 三大日志框架,并提供自動(dòng)檢測(cè),完成適配; 支持 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)簽的自定義模板的配置,提供多個(gè)系統(tǒng)級(jí)埋點(diǎn)標(biāo)簽的選擇; 支持異步線程的追蹤,包括線程池,多級(jí)異步線程等場(chǎng)景; 幾乎無(wú)性能損耗,快速穩(wěn)定。經(jīng)過(guò)壓測(cè),損耗在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)?//居中繪制(會(huì)忽略x坐標(biāo),改為自動(dòng)計(jì)算)
????????????.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,安全的移動(dòng)接入,安全的 API、第三方認(rèn)證和互聯(lián)網(wǎng)認(rèn)證的整合; 提供用戶生命周期管理,支持 SCIM 2 協(xié)議,基于 Apache Kafka 代理,通過(guò)連接器(Connector)實(shí)現(xiàn)身份供給同步; 認(rèn)證中心具有平臺(tái)無(wú)關(guān)性、環(huán)境多樣性。支持 Web、手機(jī)、移動(dòng)設(shè)備等。如 Apple iOS、Andriod 等。將認(rèn)證能力從 B/S 到移動(dòng)應(yīng)用全面覆蓋; 多種認(rèn)證機(jī)制并存,各應(yīng)用系統(tǒng)可保留原有認(rèn)證機(jī)制,同時(shí)集成認(rèn)證中心的認(rèn)證;應(yīng)用具有高度獨(dú)立性,不依賴認(rèn)證中心,又可用使用認(rèn)證中心的認(rèn)證,實(shí)現(xiàn)單點(diǎn)登錄; 基于 Java EE 平臺(tái),采用 Spring、MySQL、Tomcat、Redis、Apache Kafka 等開源技術(shù),微服務(wù)架構(gòu),擴(kuò)展性強(qiáng); 開源、安全、自主可控,許可證 Apache 2.0 License & MaxKey 版權(quán)聲明。




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


