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

來源:騰訊云

大家好,我是蝸牛。

1. Sa-Token

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


(資料圖片)

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

Gitee托管倉庫:https://gitee.com/dromara/sa-token

Github托管倉庫:https://github.com/dromara/Sa-Token

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

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

復(fù)制

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

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

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

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

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

復(fù)制

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

// 使賬號id為 10001 的會話強(qiáng)制注銷登錄StpUtil.logoutByLoginId(10001);

復(fù)制

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

StpUtil.login(10001); // 標(biāo)記當(dāng)前會話登錄的賬號idStpUtil.getLoginId(); // 獲取當(dāng)前會話登錄的賬號idStpUtil.isLogin(); // 獲取當(dāng)前會話是否已經(jīng)登錄, 返回true或falseStpUtil.logout(); // 當(dāng)前會話注銷登錄StpUtil.logoutByLoginId(10001); // 讓賬號為10001的會話注銷登錄(踢人下線)StpUtil.hasRole("super-admin"); // 查詢當(dāng)前賬號是否含有指定角色標(biāo)識, 返回true或falseStpUtil.hasPermission("user:add"); // 查詢當(dāng)前賬號是否含有指定權(quán)限, 返回true或falseStpUtil.getSession(); // 獲取當(dāng)前賬號id的SessionStpUtil.getSessionByLoginId(10001); // 獲取賬號id為10001的SessionStpUtil.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(); // 校驗(yàn)當(dāng)前會話是否處于二級認(rèn)證有效期內(nèi),校驗(yàn)失敗會拋出異常StpUtil.switchTo(10044); // 將當(dāng)前會話身份臨時(shí)切換為其它賬號

復(fù)制

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

2. Forest

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

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

Gitee托管倉庫:https://gitee.com/dromara/forest

Github托管倉庫:https://github.com/dromara/forest

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

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

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

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

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

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

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

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

/** * 高德地圖服務(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");

復(fù)制

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

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

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

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

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

復(fù)制

和 Retrofit 以及 Feign 的比較

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

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

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

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

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

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

想要了解更多請參考: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托管倉庫:https://gitee.com/dromara/liteFlow

Github托管倉庫:https://github.com/dromara/liteflow

Liteflow 為解耦復(fù)雜邏輯而生,如果你要對復(fù)雜業(yè)務(wù)邏輯進(jìn)行新寫或者重構(gòu),用 liteflow 最合適不過。它是一個(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)就會按照規(guī)則文件定義的方式,去執(zhí)行你的業(yè)務(wù)組件。是不是很簡單?

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

LiteFlow 為每一個(gè)請求都去開辟申請了一個(gè) Slot,你可以理解為上下文,所有的組件共享這個(gè) Slot。你可以在任意組件里通過對 Slot 的訪問來獲得任意數(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();//通過對slot的getData,setData,或者存取你自己擴(kuò)展的slot屬性    }}

復(fù)制

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

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

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

復(fù)制

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

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

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

想要了解更多請參考:https://yomahub.com/liteflow。

4. JPom

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

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

Gitee托管倉庫:https://gitee.com/dromara/Jpom

Github托管倉庫:https://github.com/dromara/Jpom

Jpom 是一款簡而輕的低侵入式在線構(gòu)建、自動部署、日常運(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 軟件但是這些軟件基本都會是難上手,重依賴。Jpom 則是針對中小公司或者團(tuán)隊(duì)設(shè)計(jì)的一款低侵入,輕依賴的一款輕量級的 DevOps 軟件。

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

創(chuàng)建、修改、刪除項(xiàng)目、Jar 包管理;實(shí)時(shí)查看控制臺日志、備份日志、刪除日志、導(dǎo)出日志;在線構(gòu)建項(xiàng)目發(fā)布項(xiàng)目一鍵搞定;多節(jié)點(diǎn)管理、多節(jié)點(diǎn)自動分發(fā);在線 SSH 終端,并且有終端日志和禁用命令;實(shí)時(shí)監(jiān)控項(xiàng)目狀態(tài)異常自動報(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 證書文件。

一鍵安裝(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ù)制

支持自動安裝 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ù)制

啟動成功后,插件端的端口為 2123。

服務(wù)端

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

如果需要修改數(shù)據(jù)、日志存儲路徑請參照 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ù)制

支持自動安裝 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ù)制

支持自動安裝 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ù)制

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

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

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

想要了解更多請參考:https://gitee.com/dromara/Jpom。

5. Cubic

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

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

Gitee托管倉庫:https://gitee.com/dromara/cubic

Github托管倉庫:https://github.com/dromara/cubic

5.1 介紹

一站式問題定位平臺,還在為線上問題而煩惱嗎?

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

5.2 有什么特性

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

使用后能帶來怎樣工作效率上的提升。

5.3 功能展示

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

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

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

Arthas 命令操作

線程池監(jiān)控

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

歷史線程棧

想要了解更多請參考:https://gitee.com/dromara/cubic。

6. Sureness

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

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

Gitee托管倉庫:https://gitee.com/dromara/sureness

Github托管倉庫:https://github.com/dromara/sureness

6.1 介紹

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

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

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

6.2 特性

Sureness 是我們在深度使用 Apache Shiro 之后,吸取其優(yōu)點(diǎn)全新設(shè)計(jì)開發(fā)的一個(gè)認(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)修改配置每個(gè) 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ù)。

6.3 對比

benchmark

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

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

原生支持樣例:

[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

想要了解更多請參考:https://gitee.com/dromara/sureness。

7. TLog

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

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

Gitee托管倉庫:https://gitee.com/dromara/TLog

Github托管倉庫: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è)請求的日志以及上下游業(yè)務(wù)的日志會變得有些困難。

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

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

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

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

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

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

7.2 項(xiàng)目特性

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

通過對日志打標(biāo)簽完成輕量級微服務(wù)日志追蹤;提供三種接入方式:javaagent 完全無侵入接入,字節(jié)碼一行代碼接入,基于配置文件的接入;對業(yè)務(wù)代碼無侵入式設(shè)計(jì)。使用簡單,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)簽的自定義模板的配置,提供多個(gè)系統(tǒng)級埋點(diǎn)標(biāo)簽的選擇;支持異步線程的追蹤,包括線程池,多級異步線程等場景;幾乎無性能損耗,快速穩(wěn)定。經(jīng)過壓測,損耗在0.01%。

7.3 接入方式

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

想要了解更多請參考:https://gitee.com/dromara/TLog。

8. ImageCombiner

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

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

Gitee托管倉庫:https://gitee.com/dromara/image-combiner

8.1 介紹

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

8.2 特性

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

8.3 效率提升

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

8.4 效果預(yù)覽

最簡單的例子:

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),改為自動計(jì)算)            .setColor(Color.Red) //顏色//執(zhí)行圖片合并        combiner.combine();//可以獲取流(并上傳oss等)        InputStream is = combiner.getCombinedImageStream();//也可以保存到本地        combiner.save("d://image.jpg");

復(fù)制

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

9. MaxKey

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

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

Gitee托管倉庫:https://gitee.com/dromara/MaxKey

Github托管倉庫:https://github.com/dromara/MaxKey

9.1 介紹

MaxKey 單點(diǎn)登錄認(rèn)證系統(tǒng)(Single Sign On System)。諧音馬克思的鑰匙,寓意是最大鑰匙。是業(yè)界領(lǐng)先的企業(yè)級 IAM 身份管理和認(rèn)證產(chǎn)品。支持 OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM 等標(biāo)準(zhǔn)協(xié)議。提供簡單、標(biāo)準(zhǔn)、安全和開放的用戶身份管理(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,安全的移動接入,安全的 API、第三方認(rèn)證和互聯(lián)網(wǎng)認(rèn)證的整合;提供用戶生命周期管理,支持 SCIM 2 協(xié)議,基于 Apache Kafka 代理,通過連接器(Connector)實(shí)現(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ī)制,同時(shí)集成認(rèn)證中心的認(rèn)證;應(yīng)用具有高度獨(dú)立性,不依賴認(rèn)證中心,又可用使用認(rèn)證中心的認(rèn)證,實(shí)現(xiàn)單點(diǎn)登錄;基于 Java EE 平臺,采用 Spring、MySQL、Tomcat、Redis、Apache Kafka 等開源技術(shù),微服務(wù)架構(gòu),擴(kuò)展性強(qiáng);開源、安全、自主可控,許可證 Apache 2.0 License & MaxKey 版權(quán)聲明。

界面預(yù)覽

想要了解更多請參考:https://gitee.com/dromara/MaxKey。

最后

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

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

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

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

推薦

財(cái)富更多》

動態(tài)更多》

熱點(diǎn)