環(huán)球簡(jiǎn)訊:9 個(gè) yyds 的 Java 項(xiàng)目,可應(yīng)對(duì)各種私活!

來(lái)源:騰訊云

大家好,我是蝸牛。

1. Sa-Token

首先我要介紹的是 Sa-Token,可能是史上功能最全的輕量級(jí) Java 權(quán)限認(rèn)證框架。簡(jiǎn)單的使用方式,豐富的特性,強(qiáng)大的功能,你有什么理由拒絕?


(資料圖片)

官方網(wǎng)站:http://sa-token.dev33.cn/

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/sa-token

Github托管倉(cāng)庫(kù):https://github.com/dromara/Sa-Token

Sa-Token 是一個(gè)輕量級(jí) Java 權(quán)限認(rèn)證框架,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會(huì)話、單點(diǎn)登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán)等一系列權(quán)限相關(guān)問(wèn)題。Sa-Token 的 API 設(shè)計(jì)非常簡(jiǎn)單,有多簡(jiǎn)單呢?以登錄認(rèn)證為例,你只需要:

// 在登錄時(shí)寫(xiě)入當(dāng)前會(huì)話的賬號(hào)idStpUtil.login(10001);// 然后在需要校驗(yàn)登錄處調(diào)用以下方法:// 如果當(dāng)前會(huì)話未登錄,這句代碼會(huì)拋出 `NotLoginException` 異常StpUtil.checkLogin();

復(fù)制

至此,我們已經(jīng)借助 Sa-Token 完成登錄認(rèn)證!此時(shí)的你小腦袋可能飄滿(mǎn)了問(wèn)號(hào),就這么簡(jiǎn)單?自定義 Realm 呢?全局過(guò)濾器呢?我不用寫(xiě)各種配置文件嗎?

沒(méi)錯(cuò),在 Sa-Token 中,登錄認(rèn)證就是如此簡(jiǎn)單,不需要任何的復(fù)雜前置工作,只需這一行簡(jiǎn)單的API調(diào)用,就可以完成會(huì)話登錄認(rèn)證!

當(dāng)你受夠 Shiro、SpringSecurity 等框架的三拜九叩之后,你就會(huì)明白,相對(duì)于這些傳統(tǒng)老牌框架,Sa-Token 的 API 設(shè)計(jì)是多么的簡(jiǎn)單、優(yōu)雅!

權(quán)限認(rèn)證示例(只有具備 user:add 權(quán)限的會(huì)話才可以進(jìn)入請(qǐng)求

@SaCheckPermission("user:add")@RequestMapping("/user/insert")public String insert(SysUser user) {// ...return "用戶(hù)增加";}

復(fù)制

將某個(gè)賬號(hào)踢下線(待到對(duì)方再次訪問(wèn)系統(tǒng)時(shí)會(huì)拋出 NotLoginException 異常)

// 使賬號(hào)id為 10001 的會(huì)話強(qiáng)制注銷(xiāo)登錄StpUtil.logoutByLoginId(10001);

復(fù)制

在 Sa-Token 中,絕大多數(shù)功能都可以 一行代碼 完成:

StpUtil.login(10001); // 標(biāo)記當(dāng)前會(huì)話登錄的賬號(hào)idStpUtil.getLoginId(); // 獲取當(dāng)前會(huì)話登錄的賬號(hào)idStpUtil.isLogin(); // 獲取當(dāng)前會(huì)話是否已經(jīng)登錄, 返回true或falseStpUtil.logout(); // 當(dāng)前會(huì)話注銷(xiāo)登錄StpUtil.logoutByLoginId(10001); // 讓賬號(hào)為10001的會(huì)話注銷(xiāo)登錄(踢人下線)StpUtil.hasRole("super-admin"); // 查詢(xún)當(dāng)前賬號(hào)是否含有指定角色標(biāo)識(shí), 返回true或falseStpUtil.hasPermission("user:add"); // 查詢(xún)當(dāng)前賬號(hào)是否含有指定權(quán)限, 返回true或falseStpUtil.getSession(); // 獲取當(dāng)前賬號(hào)id的SessionStpUtil.getSessionByLoginId(10001); // 獲取賬號(hào)id為10001的SessionStpUtil.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)制注銷(xiāo) (不同端不受影響)StpUtil.openSafe(120); // 在當(dāng)前會(huì)話開(kāi)啟二級(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)

復(fù)制

即使不運(yùn)行測(cè)試,相信您也能意會(huì)到絕大多數(shù) API 的用法。想要了解更多請(qǐng)參考:https://gitee.com/dromara/sa-token。

2. Forest

一款極大程度解放你的 HTTP 接入工作的強(qiáng)大 HTTP 客戶(hù)端框架。HTTP 協(xié)議很復(fù)雜嗎?那是因?yàn)槟氵€沒(méi)有使用過(guò) Forest,雖然業(yè)內(nèi)有很多其他優(yōu)秀的HTTP 客戶(hù)端,但是你錯(cuò)過(guò)了 Forest,將會(huì)錯(cuò)過(guò)一大片優(yōu)雅美麗的森林。

官方網(wǎng)站:http://forest.dtflyx.com

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/forest

Github托管倉(cāng)庫(kù):https://github.com/dromara/forest

Forest 是一個(gè)開(kāi)源的 Java HTTP 客戶(hù)端框架,用來(lái)訪問(wèn)第三方服務(wù) RESTful 接口。

它能夠?qū)?HTTP 的請(qǐng)求參數(shù)綁定到 Java 接口上,之后調(diào)用 Java 接口就等于在發(fā)送 HTTP 請(qǐng)求。一切面向于接口。

很多公司需要在 Java 后臺(tái)調(diào)用許多第三方 HTTP 接口,比如微信支付、友盟等等第三方平臺(tái)。

公司內(nèi)部還有很多服務(wù)是用世界最好語(yǔ)言寫(xiě)的,接口自然也只能通過(guò) HTTP 接口來(lái)調(diào)用。于是日積月累下來(lái),在 Java 代碼中就有許許多多各式各樣的 HTTP 調(diào)用接口,而且調(diào)用方式也不統(tǒng)一,有 HttpClient 寫(xiě)的、有 OkHttp 寫(xiě)的、有自己包裝的,光公司內(nèi)部不同人包裝的 HTTP 工具類(lèi)就有兩三種。

而且 url 基本寫(xiě)死在代碼中,很難維護(hù),不同接口又有不同的參數(shù)傳輸方式,有 GET 、有 POST,有 JSON 傳輸?shù)?、?XML 傳輸?shù)摹.?dāng)有一個(gè)接口需要修改,完了,光找到代碼在什么地方就要花半天時(shí)間。

而 Forest 能幫助我很好地將 HTTP 代碼和業(yè)務(wù)代碼解耦開(kāi)來(lái),請(qǐng)求調(diào)用者不必關(guān)心 HTTP 相關(guān)的細(xì)節(jié)。

自動(dòng)拼接 HTTP 的各種參數(shù)

包括 URL、Header、Body 等等參數(shù)都能依靠 Java 注解來(lái)聲明。這里就舉一個(gè)高德地圖的栗子,來(lái)看看 Forest 是如何優(yōu)雅的聲明 HTTP 請(qǐng)求接口的:

/** * 高德地圖服務(wù)客戶(hù)端接口 */@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)求查詢(xún)經(jīng)緯度Map locationInfo = amap.getLocation("32.1242832", "56.3290434");

復(fù)制

自動(dòng) JSON 和 XML 轉(zhuǎn)換

其實(shí),我們處理 HTTP 的工作時(shí),除了浪費(fèi)在組裝各種請(qǐng)求參數(shù)外,大部分時(shí)間都花了在序列化和反序列化各種格式的數(shù)據(jù)上,如 JSON 和 XML。

以前用 HttpClient,這些重復(fù)的機(jī)械性工作都要自己來(lái)搞,很是麻煩。

用 Forest 就方便多了,比如要 POST 一個(gè) JSON 對(duì)象,直接掛個(gè) @JSONBody 就好了,就是這么清爽。

// 直接將 MyUserInfo 轉(zhuǎn)換成 JSON// 將服務(wù)端響應(yīng)返回的 JSON 數(shù)據(jù)轉(zhuǎn)換成 Result 類(lèi)對(duì)象@Post("http://localhost:8080/user")Result createUser(@JSONBody MyUserInfo user);

復(fù)制

和 Retrofit 以及 Feign 的比較

之前也用過(guò)這兩款開(kāi)源框架,都很強(qiáng)大,但各有優(yōu)缺點(diǎn)。

Retrofit 的主要的問(wèn)題時(shí)和 OkHttp 綁的太死,有些功能被 OkHttp 限制住了,比如我想處理 Get 請(qǐng)求傳輸 Body 數(shù)據(jù)這種非標(biāo)準(zhǔn)的 HTTP 請(qǐng)求就很難辦到,而 Forest 可以隨意切換 OkHttp 和 HttpClient 作為后端,需要用哪個(gè)時(shí)用哪個(gè)。

Retrofit 注解的豐富性也不如 Forest,比如要實(shí)現(xiàn) HTTP 網(wǎng)絡(luò)代理就要自己去寫(xiě)代碼,而 Forest 提供了 @HTTPProxy 注解,設(shè)置一下就完事了。

如果要擴(kuò)展自定義注解都是基于 OkHttp 的攔截器,不是特別方便,而 Forest 攔截器要比 OkHttp 的方便很多,提供 onInvoke, beforeExecute, onSccuess, onError 等回調(diào)方法,等于把一個(gè)請(qǐng)求的生老病死都涵蓋了。

而 Feign 的問(wèn)題則是和 Spring 綁的太緊,很多功能需要依賴(lài) Spring 去做,太加了 Spring 相關(guān)包又太重了。

Forest 的核心包基本涵蓋了所有 HTTP 所需功能和注解,不依賴(lài) Spring,要輕量許多,但又不失方便性。

想要了解更多請(qǐng)參考:https://gitee.com/dromara/forest。

3. LiteFlow

一款超輕量,快速,穩(wěn)定,可編排的組件式流程引擎/規(guī)則引擎。

解耦復(fù)雜系統(tǒng)的神器!如果你正在為設(shè)計(jì)一個(gè)復(fù)雜系統(tǒng)感到頭痛,那么 LiteFlow 是你不二的選擇,超低的學(xué)習(xí)成本,強(qiáng)大的編排功能,讓你的系統(tǒng)變得更優(yōu)雅!

官方網(wǎng)站:https://yomahub.com/liteflow

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/liteFlow

Github托管倉(cāng)庫(kù):https://github.com/dromara/liteflow

Liteflow 為解耦復(fù)雜邏輯而生,如果你要對(duì)復(fù)雜業(yè)務(wù)邏輯進(jìn)行新寫(xiě)或者重構(gòu),用 liteflow 最合適不過(guò)。它是一個(gè)輕量,快速的組件式流程引擎框架,組件編排,幫助解耦業(yè)務(wù)代碼,讓每一個(gè)業(yè)務(wù)片段都是一個(gè)組件。

使用 Liteflow,你需要去把復(fù)雜的業(yè)務(wù)邏輯按代碼片段拆分成一個(gè)個(gè)小組件,并定義一個(gè)規(guī)則流程配置。這樣,所有的組件,就能按照你的規(guī)則配置去進(jìn)行復(fù)雜的流轉(zhuǎn)。同時(shí) Liteflow 支持規(guī)則文件的熱加載,即時(shí)完成修改生效。并提供多種持久化規(guī)則的方式的擴(kuò)展。

使用 LiteFLow,三大核心概念是組件,規(guī)則和上下文。

你需要這么像這樣去定義你的組件:

//這里普通組件@LiteflowComponent(id = "a", name = "組件A描述")public class ACmp extends NodeComponent {@Overridepublic void process() {//do your business    }}//這是條件組件@LiteflowComponent(id = "b", name = "組件B描述")public class BCondCmp extends NodeCondComponent {@Overridepublic String processCond() {//do your businessreturn "e";    }}

復(fù)制

然后去定義你的規(guī)則,LiteFlow支持 XML,yml,JSON 三種格式。這里以 XML 形式為例:

    

復(fù)制

復(fù)制

這樣你的系統(tǒng)就會(huì)按照規(guī)則文件定義的方式,去執(zhí)行你的業(yè)務(wù)組件。是不是很簡(jiǎn)單?

那規(guī)則文件定義在哪呢,LiteFlow 并不限定你的規(guī)則文件來(lái)源,可以是本地文件,可以是注冊(cè)中心,可以是任何數(shù)據(jù)庫(kù)。LiteFlow 提供了非常自由的接口供你擴(kuò)展,你想存儲(chǔ)在哪里都行。改變規(guī)則文件,即可實(shí)時(shí)刷新你的規(guī)則流程!如果你想做一個(gè)靈活度高,伸縮性強(qiáng)的系統(tǒng),LiteFlow 是不是非常適合呢?

LiteFlow 為每一個(gè)請(qǐng)求都去開(kāi)辟申請(qǐng)了一個(gè) Slot,你可以理解為上下文,所有的組件共享這個(gè) Slot。你可以在任意組件里通過(guò)對(duì) Slot 的訪問(wèn)來(lái)獲得任意數(shù)據(jù),也可以存放任意數(shù)據(jù)。你也可以擴(kuò)展 Slot,自定義這個(gè) Slot 的屬性。

@LiteflowComponent(id = "a", name = "組件A描述")public class ACmp extends NodeComponent {@Overridepublic void process() {        Slot slot = this.getSlot();//通過(guò)對(duì)slot的getData,setData,或者存取你自己擴(kuò)展的slot屬性    }}

復(fù)制

正因?yàn)橛?Slot 的存在,才抹平了組件與組件之間的差異性,使得每一個(gè)業(yè)務(wù)組件之間無(wú)強(qiáng)依賴(lài)。這樣的設(shè)計(jì),就可以讓你的系統(tǒng)高度自由化,組件復(fù)用,組件調(diào)換順序得以方便的實(shí)現(xiàn)!

LiteFlow 還支持 2 種腳本語(yǔ)言的接入,目前支持 Groovy 和 QLExpress 兩種腳本語(yǔ)言。你可以在 xml/yml/json 定義腳本,以下以 XML 為例:

                         100){                    return "a";                }else{                    return "b";                }            ]]>

復(fù)制

那么在什么地方定義是哪種語(yǔ)言的腳本呢?LiteFlow 的腳本功能是一個(gè) SPI 機(jī)制的實(shí)現(xiàn)。你依賴(lài)了哪個(gè)腳本包,就以哪種腳本的方式執(zhí)行。

有了腳本語(yǔ)言的支持,連業(yè)務(wù)代碼是不是都可以熱部署了?香不香?

LiteFlow 的功能遠(yuǎn)不止這些,想了解更多,請(qǐng)到官網(wǎng)文檔去查看了解。相信LiteFlow會(huì)讓你感到優(yōu)雅和驚艷。

想要了解更多請(qǐng)參考:https://yomahub.com/liteflow。

4. JPom

一款簡(jiǎn)而輕的低侵入式在線構(gòu)建、自動(dòng)部署、日常運(yùn)維、項(xiàng)目監(jiān)控軟件。中小公司團(tuán)隊(duì) DevOps 的福音!輕量且強(qiáng)大,你不試試?

官方網(wǎng)站:https://jpom.io/

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/Jpom

Github托管倉(cāng)庫(kù):https://github.com/dromara/Jpom

Jpom 是一款簡(jiǎn)而輕的低侵入式在線構(gòu)建、自動(dòng)部署、日常運(yùn)維、項(xiàng)目監(jiān)控軟件。

在中小公司或者團(tuán)隊(duì)中傳統(tǒng)項(xiàng)目部署、運(yùn)維流程通用的方法是登錄服務(wù)器上傳新的項(xiàng)目包,執(zhí)行相應(yīng)命令管理,如果管理多個(gè)項(xiàng)目則重復(fù)操作上述步驟。

市面上有很許多 DevOps 軟件但是這些軟件基本都會(huì)是難上手,重依賴(lài)。Jpom 則是針對(duì)中小公司或者團(tuán)隊(duì)設(shè)計(jì)的一款低侵入,輕依賴(lài)的一款輕量級(jí)的 DevOps 軟件。

項(xiàng)目主要功能及特點(diǎn):

創(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)控;多用戶(hù)管理,用戶(hù)項(xiàng)目權(quán)限獨(dú)立(上傳、刪除權(quán)限可控制),完善的操作日志;系統(tǒng)路徑白名單模式,杜絕用戶(hù)誤操作系統(tǒng)文件;在線管理 Nginx 配置文件、SSL 證書(shū)文件。

一鍵安裝(Linux)(推薦)

插件端

如果服務(wù)端也需要被管理,在服務(wù)端上也需要安裝插件端。安裝的路徑位于執(zhí)行命令目錄(數(shù)據(jù)、日志存放目錄默認(rèn)位于安裝路徑,如需要修改參考配置文件:extConfig.yml )。

yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Agent

復(fù)制

備用地址yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Agent

復(fù)制

支持自動(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

復(fù)制

啟動(dòng)成功后,插件端的端口為 2123。

服務(wù)端

安裝的路徑位于執(zhí)行命令目錄(數(shù)據(jù)、日志存放目錄默認(rèn)位于安裝路徑,如需要修改參考配置文件:extConfig.yml )。

如果需要修改數(shù)據(jù)、日志存儲(chǔ)路徑請(qǐng)參照 extConfig.yml 文件中 jpom.path 配置屬性。

yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server

復(fù)制

備用地址yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Server

復(fù)制

支持自動(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

復(fù)制

支持自動(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

復(fù)制

啟動(dòng)成功后,服務(wù)端的端口為 2122 訪問(wèn)管理頁(yè)面。例如 http://localhost:2122/

特別提醒:一鍵安裝的時(shí)候注意執(zhí)行命令不可在同一目錄下,即 Server 端和 Agent 端不可安裝在同一目錄下。

如無(wú)法訪問(wèn),檢查下是否開(kāi)啟了防火墻 systemctl status firewalld,如狀態(tài)顯示為綠色 Active: active (running) 可臨時(shí)關(guān)閉防火墻 systemctl stop firewalld,然后重啟防火墻。firewall-cmd --reload(建議僅測(cè)試環(huán)境下使用,生產(chǎn)環(huán)境下慎用) 如關(guān)閉防火墻后仍無(wú)法訪問(wèn),并且使用的是云服務(wù)器,還需要到云服務(wù)器管理后臺(tái)中關(guān)閉防火墻。

想要了解更多請(qǐng)參考:https://gitee.com/dromara/Jpom。

5. Cubic

首先我要介紹的是Cubic,一站式問(wèn)題定位平臺(tái)!線程棧監(jiān)控、線程池監(jiān)控、動(dòng)態(tài)arthas命令集、依賴(lài)分析等等等,強(qiáng)不強(qiáng)大,香不香?

官方網(wǎng)站:https://cubic.jiagoujishu.com/

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/cubic

Github托管倉(cāng)庫(kù):https://github.com/dromara/cubic

5.1 介紹

一站式問(wèn)題定位平臺(tái),還在為線上問(wèn)題而煩惱嗎?

線程棧監(jiān)控、線程池監(jiān)控、動(dòng)態(tài) arthas 命令集、依賴(lài)分析等等等,致力于應(yīng)用級(jí)監(jiān)控,幫助開(kāi)發(fā)人員快速定位問(wèn)題。

5.2 有什么特性

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

使用后能帶來(lái)怎樣工作效率上的提升。

5.3 功能展示

實(shí)例中心(展示當(dāng)前實(shí)例信息)

基礎(chǔ)信息(點(diǎn)擊實(shí)例->展示當(dāng)前實(shí)例的基礎(chǔ)信息)

依賴(lài)監(jiān)控(點(diǎn)擊實(shí)例-〉展示當(dāng)前實(shí)例的依賴(lài)包信息)

Arthas 命令操作

線程池監(jiān)控

實(shí)時(shí)線程棧

歷史線程棧

想要了解更多請(qǐng)參考:https://gitee.com/dromara/cubic。

6. Sureness

丟掉 Shiro 吧,也別再用 Spring Security了。簡(jiǎn)單易用多語(yǔ)言多框架支持,基于 RESTAPI 的強(qiáng)大國(guó)產(chǎn)鑒權(quán)框架,效率神器!

官方網(wǎng)站:https://usthe.com/sureness

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/sureness

Github托管倉(cāng)庫(kù):https://github.com/dromara/sureness

6.1 介紹

在主流的前后端分離架構(gòu)中,如何通過(guò)有效快速的認(rèn)證鑒權(quán)來(lái)保護(hù)后端提供的 REST API 變得尤為重要。

對(duì)現(xiàn)存框架,不原生支持 RESTful 的 Apache Shiro,還是深度綁定 Spring 的 Spring Security,或多或少都不是我們的理想選型。

于是乎 Sureness 誕生了,我們希望能解決這些問(wèn)題。提供一個(gè)面向 REST API、無(wú)框架依賴(lài)、可以動(dòng)態(tài)修改權(quán)限、多認(rèn)證策略、更快速度、易用易擴(kuò)展的認(rèn)證鑒權(quán)框架。

6.2 特性

Sureness 是我們?cè)谏疃仁褂?Apache Shiro 之后,吸取其優(yōu)點(diǎn)全新設(shè)計(jì)開(kāi)發(fā)的一個(gè)認(rèn)證鑒權(quán)框架。

面向 REST API 的認(rèn)證鑒權(quán),基于 RBAC(用戶(hù)-角色-資源)主要關(guān)注于對(duì) API 的安全保護(hù)。無(wú)特定 Web 框架依賴(lài),開(kāi)箱即用(已有 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)的字典匹配樹(shù)擁有的高性能;良好的擴(kuò)展接口、樣例和文檔,幫助急速理解、擴(kuò)展與使用 Sureness 的低配置;易擴(kuò)展,不耦合其他框架,希望能對(duì)系統(tǒng)多場(chǎng)景快速安全的保護(hù)。

6.3 對(duì)比

benchmark

基準(zhǔn)測(cè)試顯示 Sureness 對(duì)比無(wú)權(quán)限框架應(yīng)用損耗 0.026ms 性能,Shiro 損耗0.088ms、Spring Security 損耗 0.116ms。

性能差距會(huì)隨著api匹配鏈的增加而進(jìn)一步拉大。

原生支持樣例:

[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

想要了解更多請(qǐng)參考:https://gitee.com/dromara/sureness。

7. TLog

十分鐘即可接入,一款神器的日志框架。支持眾多的框架和主流 RPC,讓你的日志馬上升級(jí),變得可追溯!

官方網(wǎng)站:http://yomahub.com/tlog

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/TLog

Github托管倉(cāng)庫(kù):https://github.com/dromara/TLog

7.1 介紹

隨著微服務(wù)盛行,很多公司都把系統(tǒng)按照業(yè)務(wù)邊界拆成了很多微服務(wù)。在排錯(cuò)查日志的時(shí)候,因?yàn)闃I(yè)務(wù)鏈路貫穿著很多微服務(wù)節(jié)點(diǎn),導(dǎo)致定位某個(gè)請(qǐng)求的日志以及上下游業(yè)務(wù)的日志會(huì)變得有些困難。

這時(shí)候很多童鞋會(huì)開(kāi)始考慮上 SkyWalking、Pinpoint 等分布式追蹤系統(tǒng)來(lái)解決。基于 OpenTracing 規(guī)范,而且通常都是無(wú)侵入性的,并且有相對(duì)友好的管理界面來(lái)進(jìn)行鏈路 Span 的查詢(xún)。

但是搭建分布式追蹤系統(tǒng),熟悉以及推廣到全公司的系統(tǒng)需要一定的時(shí)間周期。而且當(dāng)中涉及到鏈路 span節(jié)點(diǎn)的存儲(chǔ)成本問(wèn)題,全量采集還是部分采集?

如果全量采集,就以 SkyWalking 的存儲(chǔ)來(lái)舉例,ES 集群搭建至少需要 5 個(gè)節(jié)點(diǎn)。這就需要增加服務(wù)器成本。況且如果微服務(wù)節(jié)點(diǎn)多的話,一天下來(lái)產(chǎn)生幾十 G 上百 G 的數(shù)據(jù)其實(shí)非常正常。如果想保存時(shí)間長(zhǎng)點(diǎn)的話,也需要增加服務(wù)器磁盤(pán)的成本。

當(dāng)然分布式追蹤系統(tǒng)是一個(gè)最終的解決方案,如果您的公司已經(jīng)上了分布式追蹤系統(tǒng),那 TLog 并不適用。

TLog 提供了一種最簡(jiǎn)單的方式來(lái)解決日志追蹤問(wèn)題。它不收集日志,也不需要另外的存儲(chǔ)空間,它只是自動(dòng)的對(duì)你的日志進(jìn)行打標(biāo)簽。自動(dòng)生成 TraceId 貫穿你微服務(wù)的一整條鏈路。并且提供上下游節(jié)點(diǎn)信息。適合中小型企業(yè)以及想快速解決日志追蹤問(wèn)題的公司項(xiàng)目使用。

為此 TLog 適配了三大日志框架,支持自動(dòng)檢測(cè)適配。支持 Dubbo、Dubbox、Spring Cloud 三大RPC框架。更重要的是,你的項(xiàng)目接入 TLog,可能連十分鐘就不需要 :)

7.2 項(xiàng)目特性

目前 TLog 的支持的特性如下:

通過(guò)對(duì)日志打標(biāo)簽完成輕量級(jí)微服務(wù)日志追蹤;提供三種接入方式:javaagent 完全無(wú)侵入接入,字節(jié)碼一行代碼接入,基于配置文件的接入;對(duì)業(yè)務(wù)代碼無(wú)侵入式設(shè)計(jì)。使用簡(jiǎn)單,10 分鐘即可接入;支持常見(jiàn)的 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%。

7.3 接入方式

使用后你的每行日志會(huì)變成以下格式:

想要了解更多請(qǐng)參考:https://gitee.com/dromara/TLog。

8. ImageCombiner

無(wú)需 P 圖,用 Java 也能合成很好看的圖,簡(jiǎn)單的使用方式,服務(wù)端批量合圖利器!

官方網(wǎng)站:http://dromara.gitee.io/image-combiner

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/image-combiner

8.1 介紹

ImageCombiner 是一個(gè)專(zhuān)門(mén)用于 Java 服務(wù)端圖片合成的工具。沒(méi)有很復(fù)雜的功能,追求簡(jiǎn)單實(shí)用,從實(shí)際業(yè)務(wù)場(chǎng)景出發(fā),提供簡(jiǎn)單的接口,幾行代碼即可實(shí)現(xiàn)圖片拼合(當(dāng)然用于合成水印也可以)。特別適合圖片營(yíng)銷(xiāo)、產(chǎn)品分享等需要實(shí)時(shí)生成圖片場(chǎng)景。

8.2 特性

素材上支持圖片、文本、矩形三種,支持元素的定位、縮放、旋轉(zhuǎn)、圓角、透明度、顏色、字體、字號(hào)、刪除線、居中繪制、文本自動(dòng)換行等特性,足夠覆蓋圖片合成的日常需求。項(xiàng)目不依賴(lài)任何框架,完全基于 JDK 本身編寫(xiě),沒(méi)有各種花里胡哨的東西,性能還是相當(dāng)不錯(cuò)的。

8.3 效率提升

通過(guò)對(duì) Graphics2D 的封裝和元素模型的提煉,屏蔽了圖像處理細(xì)節(jié),把復(fù)雜的編碼簡(jiǎn)化為設(shè)置各個(gè)元素的位置、屬性即可。作者日常工作中,一個(gè)約含十余個(gè)元素的復(fù)雜圖片合成,開(kāi)發(fā)加調(diào)試(主要是對(duì)比設(shè)計(jì)稿還原度)20分鐘即可搞定,極大的釋放了生產(chǎn)力。

8.4 效果預(yù)覽

最簡(jiǎn)單的例子:

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");

復(fù)制

想要了解更多請(qǐng)參考:https://gitee.com/dromara/image-combiner。

9. MaxKey

MaxKey 單點(diǎn)登錄認(rèn)證系統(tǒng)是業(yè)界領(lǐng)先的企業(yè)級(jí) IAM 身份管理和認(rèn)證框架,產(chǎn)品化程度很高,多家知名公司的選擇!

官方網(wǎng)站:https://www.maxkey.top/

Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/MaxKey

Github托管倉(cāng)庫(kù):https://github.com/dromara/MaxKey

9.1 介紹

MaxKey 單點(diǎn)登錄認(rèn)證系統(tǒng)(Single Sign On System)。諧音馬克思的鑰匙,寓意是最大鑰匙。是業(yè)界領(lǐng)先的企業(yè)級(jí) IAM 身份管理和認(rèn)證產(chǎn)品。支持 OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM 等標(biāo)準(zhǔn)協(xié)議。提供簡(jiǎn)單、標(biāo)準(zhǔn)、安全和開(kāi)放的用戶(hù)身份管理(IDM)、身份認(rèn)證(AM)、單點(diǎn)登錄(SSO)、RBAC 權(quán)限管理和資源管理等。

9.2 特性

標(biāo)準(zhǔn)認(rèn)證協(xié)議

登錄支持

提供標(biāo)準(zhǔn)的認(rèn)證接口以便于其他應(yīng)用集成 SSO,安全的移動(dòng)接入,安全的 API、第三方認(rèn)證和互聯(lián)網(wǎng)認(rèn)證的整合;提供用戶(hù)生命周期管理,支持 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ú)立性,不依賴(lài)認(rèn)證中心,又可用使用認(rèn)證中心的認(rèn)證,實(shí)現(xiàn)單點(diǎn)登錄;基于 Java EE 平臺(tái),采用 Spring、MySQL、Tomcat、Redis、Apache Kafka 等開(kāi)源技術(shù),微服務(wù)架構(gòu),擴(kuò)展性強(qiáng);開(kāi)源、安全、自主可控,許可證 Apache 2.0 License & MaxKey 版權(quán)聲明。

界面預(yù)覽

想要了解更多請(qǐng)參考:https://gitee.com/dromara/MaxKey。

最后

其實(shí)Dromara開(kāi)源社區(qū)還有最知名的項(xiàng)目(也是star最多的項(xiàng)目)——Hutool,那我為什么不寫(xiě)呢。我想說(shuō),這框架普及率太高了,幾乎是可以取代 Apache Common 包、Guava包的存在,程序員應(yīng)該每個(gè)人都用下。

以上推薦的開(kāi)源項(xiàng)目,也是 Dromara Java 社區(qū)里的精品項(xiàng)目,很多都已經(jīng)是 GVP 項(xiàng)目了,用好這些框架/工具,真的能讓工作效率大大提升。

我是蝸牛,大廠程序員,專(zhuān)注技術(shù)原創(chuàng)和個(gè)人成長(zhǎng),正在互聯(lián)網(wǎng)上摸爬滾打。下期見(jiàn)!

標(biāo)簽: https HTTP 網(wǎng)絡(luò)安全 Apache Spring

推薦

財(cái)富更多》

動(dòng)態(tài)更多》

熱點(diǎn)