Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0
42.5MB / 01-19
SpringBlade微服務(wù)開(kāi)發(fā)平臺(tái) v4.4.0
197KB / 01-30
Diboot輕代碼開(kāi)發(fā)平臺(tái) v2.11.0
1.3MB / 07-20
RuoYi-activiti工作流平臺(tái)源碼 v4.1
24.79MB / 07-19
RuoYi若依權(quán)限管理系統(tǒng) v4.7.9
4.12MB / 06-28
Java Struts2漏洞復(fù)現(xiàn)工具
98KB / 06-26
java操作excel的jar包(jxl.jar包 源碼)
610KB / 06-26
springboot整合QuartJob實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理源代碼
29KB / 06-26
SOFABoot開(kāi)源框架 v3.24.0
587KB / 08-31
基于SSM的應(yīng)急資源管理系統(tǒng)源碼 v1.0
80.7MB / 05-25
-
Pinpoint應(yīng)用性能管理工具 v3.0.2 java源碼 / 18.8MB
-
Presto大數(shù)據(jù)查詢引擎 v0.292 java源碼 / 10.89MB
-
-
-
Zotero文獻(xiàn)管理工具 v7.0.15 java源碼 / 6.8MB
-
Logstash日志管理系統(tǒng) v8.17.4 java源碼 / 18.9MB
-
-
Mall4j商城系統(tǒng) v3.4 java源碼 / 14.2MB
-
-
詳情介紹
sureness是一個(gè)簡(jiǎn)單高效的面向restful api的認(rèn)證鑒權(quán)框架。
背景
現(xiàn)在很多網(wǎng)站都進(jìn)行了前后端分離,后端提供rest api,前端調(diào)用接口獲取數(shù)據(jù)渲染。這種架構(gòu)下如何保護(hù)好后端所提供的rest api使得更加重視。
api的保護(hù)可以認(rèn)為:認(rèn)證-請(qǐng)求攜帶的認(rèn)證信息是否校驗(yàn)通過(guò),鑒權(quán)-認(rèn)證通過(guò)的用戶擁有指定api的權(quán)限才能訪問(wèn)此api。然而不僅于此,什么樣的認(rèn)證策略, jwt, basic,digest,oauth還是多支持, 權(quán)限配置是寫(xiě)死代碼還是動(dòng)態(tài)配置,我想動(dòng)態(tài)賦權(quán)怎么辦,云原生越來(lái)越火用的框架是quarkus等新秀不是spring生態(tài)咋弄,http實(shí)現(xiàn)不是servlet而是jax-rs規(guī)范咋整, to be or not to be, this is a question
目前java主流的權(quán)限框架有shiro,spring security, 下面對(duì)于它們的探討都是個(gè)人之見(jiàn),接受糾正
shiro對(duì)于restful api原生支持不太友好,需要改寫(xiě)一些代碼,2年前一個(gè)項(xiàng)目 booshiro 就是改造shiro,使其在過(guò)濾鏈就能匹配不同的rest請(qǐng)求進(jìn)行權(quán)限校驗(yàn),之后給shiro commit幾次pr,fix其在過(guò)濾鏈匹配時(shí)的危險(xiǎn)漏洞,總的來(lái)說(shuō)shiro很強(qiáng)大但其起源并非面向web,對(duì)restful不是很友好
spring security很強(qiáng)大,與spring深度集成,離開(kāi)spring,比如javalin和之前用過(guò)的osgi框架karaf就用不了了
如果不用注解配置,它們都會(huì)在鏈?zhǔn)狡ヅ溥@塊,用請(qǐng)求的url和配置的鏈一個(gè)一個(gè)ant匹配(匹配過(guò)程中會(huì)有緩存等提高性能),但匹配的鏈過(guò)多時(shí)還是比較耗性能(根據(jù)算法時(shí)間復(fù)雜度判斷,暫未測(cè)試驗(yàn)證)
我們希望能解決這些,提供一個(gè)針對(duì)restful api,無(wú)框架依賴,可以動(dòng)態(tài)修改權(quán)限,多認(rèn)證策略,更快速度,易用的認(rèn)證鑒權(quán)框架。
介紹
sureness 是我們?cè)谑褂?java 權(quán)限框架 shiro 之后,吸取其良好設(shè)計(jì)加上一些想法實(shí)現(xiàn)的全新認(rèn)證鑒權(quán)項(xiàng)目
面對(duì) restful api 的認(rèn)證鑒權(quán),基于 rbac (用戶-角色-資源)主要關(guān)注于對(duì) restful api 的安全保護(hù)
無(wú)特定框架依賴(本質(zhì)就是過(guò)濾器處攔截判斷,已有springboot,quarkus,javalin,ktor等demo)
支持動(dòng)態(tài)修改權(quán)限配置(動(dòng)態(tài)修改哪些api需要被認(rèn)證,可以被誰(shuí)訪問(wèn))
支持主流http容器 servlet 和 jax-rs
支持多種認(rèn)證策略, jwt, basic auth, digest auth ... 可擴(kuò)展自定義支持的認(rèn)證方式
基于改進(jìn)的字典匹配樹(shù)擁有的高性能
良好的擴(kuò)展接口, demo和文檔
sureness的低配置,易擴(kuò)展,不耦合其他框架,能使開(kāi)發(fā)者對(duì)自己的項(xiàng)目多場(chǎng)景快速安全的進(jìn)行保護(hù)
框架示例支持
spring sample-bootstrap
springboot sample-tom
quarkus sample-quarkus
javalin sample-javalin
ktor sample-ktor
spring webflux sample-spring-webflux
more samples todo
快速開(kāi)始
使用前一些約定
sureness盡量簡(jiǎn)潔,基于rbac,只有(角色-資源)的映射,沒(méi)有(權(quán)限)動(dòng)作映射,即 用戶-角色-資源
我們將restful api請(qǐng)求視作一個(gè)資源,資源格式為: requestUri===httpMethod
即請(qǐng)求的路徑加上其請(qǐng)求方式(post,get,put,delete...)作為一個(gè)整體被視作一個(gè)資源
eg: /api/v2/book===get get方式請(qǐng)求/api/v2/book接口數(shù)據(jù)
角色資源映射: 用戶所屬角色--角色擁有資源--用戶擁有資源(用戶就能訪問(wèn)此api)
資源路徑匹配詳見(jiàn) url路徑匹配
項(xiàng)目中加入sureness
項(xiàng)目使用maven或gradle構(gòu)建,加入坐標(biāo)
<dependency>
<groupId>com.usthe.sureness</groupId>
<artifactId>sureness-core</artifactId>
<version>0.4</version>
</dependency>
compile group: 'com.usthe.sureness', name: 'sureness-core', version: '0.4'
使用默認(rèn)配置來(lái)配置sureness
默認(rèn)配置使用了文件數(shù)據(jù)源sureness.yml作為賬戶權(quán)限數(shù)據(jù)源
默認(rèn)配置支持了jwt, basic auth, digest auth認(rèn)證
@Bean
public DefaultSurenessConfig surenessConfig() {
return new DefaultSurenessConfig();
}
配置權(quán)限賬戶數(shù)據(jù)源
sureness認(rèn)證鑒權(quán),當(dāng)然也需要我們提供自己的賬戶數(shù)據(jù),角色權(quán)限數(shù)據(jù)等,這些數(shù)據(jù)可能來(lái)自文本,關(guān)系數(shù)據(jù)庫(kù),非關(guān)系數(shù)據(jù)庫(kù),注解等。
我們提供了數(shù)據(jù)源接口:SurenessAccountProvider - 賬戶數(shù)據(jù)接口, PathTreeProvider - 資源權(quán)限數(shù)據(jù)接口,用戶可以實(shí)現(xiàn)此接口實(shí)現(xiàn)自定義數(shù)據(jù)源。
當(dāng)前我們也提供文本形式的數(shù)據(jù)源實(shí)現(xiàn) DocumentResourceDefaultProvider 和 注解形式的資源權(quán)限數(shù)據(jù)源實(shí)現(xiàn) AnnotationLoader。
如果是使用了默認(rèn)sureness配置-DefaultSurenessConfig,其配置的是文本數(shù)據(jù)源,用戶可以直接通過(guò)修改sureness.yml文件來(lái)配置數(shù)據(jù)。
文本數(shù)據(jù)源sureness.yml配置使用方式詳見(jiàn)文檔 默認(rèn)文本數(shù)據(jù)源
注解形式的資源權(quán)限數(shù)據(jù)源配置使用方式詳見(jiàn)文檔 注解資源權(quán)限數(shù)據(jù)源
我們提供了使用代碼DEMO:
默認(rèn)文本數(shù)據(jù)源具體實(shí)現(xiàn),請(qǐng)參考使用sureness10分鐘搭建權(quán)限項(xiàng)目--sample-bootstrap
若權(quán)限配置數(shù)據(jù)來(lái)自數(shù)據(jù)庫(kù),請(qǐng)參考使用sureness30分鐘搭建權(quán)限項(xiàng)目--sample-tom
添加過(guò)濾器攔截所有請(qǐng)求
sureness的本質(zhì)就攔截所有rest請(qǐng)求對(duì)其認(rèn)證鑒權(quán)判斷。
入口攔截器器實(shí)現(xiàn)一般可以是 filter or spring interceptor
在攔截器中加入sureness的安全過(guò)濾器,如下:
SubjectSum subject = SurenessSecurityManager.getInstance().checkIn(servletRequest)
實(shí)現(xiàn)認(rèn)證鑒權(quán)相關(guān)異常處理流程
sureness使用異常處理流程:
若認(rèn)證鑒權(quán)成功,checkIn會(huì)返回包含用戶信息的SubjectSum對(duì)象
若中間認(rèn)證鑒權(quán)失敗,checkIn會(huì)拋出不同類型的認(rèn)證鑒權(quán)異常,用戶需根據(jù)這些異常來(lái)繼續(xù)后面的流程(返回相應(yīng)的請(qǐng)求響應(yīng))
這里我們就需要對(duì)checkIn拋出的異常做自定義處理,認(rèn)證鑒權(quán)成功直接通過(guò),失敗拋出特定異常進(jìn)行處理,如下:
try {
SubjectSum subject = SurenessSecurityManager.getInstance().checkIn(servletRequest);
} catch (ProcessorNotFoundException | UnknownAccountException | UnsupportedSubjectException e4) {
// 賬戶創(chuàng)建相關(guān)異常
} catch (DisabledAccountException | ExcessiveAttemptsException e2 ) {
// 賬戶禁用相關(guān)異常
} catch (IncorrectCredentialsException | ExpiredCredentialsException e3) {
// 認(rèn)證失敗相關(guān)異常
} catch (UnauthorizedException e5) {
// 鑒權(quán)失敗相關(guān)異常
} catch (SurenessAuthenticationException | SurenessAuthorizationException e) {
// 其他自定義異常
}
異常詳見(jiàn) 默認(rèn)異常類型
HAVE FUN
進(jìn)階擴(kuò)展
如果了解 處理流程,就大概知道sureness提供的擴(kuò)展點(diǎn)
sureness支持自定義subject,自定義subjectCreator注冊(cè),自定義processor處理器等
擴(kuò)展之前需要了解以下接口:
Subject: 認(rèn)證鑒權(quán)對(duì)象接口,提供訪問(wèn)對(duì)象的賬戶密鑰,請(qǐng)求資源,角色等信息
SubjectCreate: 創(chuàng)建Subject接口,根據(jù)請(qǐng)求內(nèi)容創(chuàng)建不同類型的Subject對(duì)象
Processor: Subject處理接口,根據(jù)Subject信息,進(jìn)行認(rèn)證鑒權(quán)
PathTreeProvider: 資源的數(shù)據(jù)源接口,實(shí)現(xiàn)從數(shù)據(jù)庫(kù),文本等加載數(shù)據(jù)
SurenessAccountProvider: 用戶的賬戶密鑰信息接口,實(shí)現(xiàn)從數(shù)據(jù)庫(kù),文本等加載數(shù)據(jù)
sureness大致流程:
1、自定義數(shù)據(jù)源
實(shí)現(xiàn) PathTreeProvider的接口, 加載到DefaultPathRoleMatcher中
實(shí)現(xiàn) SurenessAccountProvider的接口,加載到需要的processor中
2、自定義subject
實(shí)現(xiàn)Subject接口,添加自定義的subject內(nèi)容
實(shí)現(xiàn)SubjectCreate接口方法,創(chuàng)建出自定義的subject
實(shí)現(xiàn)Processor接口,支持處理自定義的subject
3、自定義processor
一個(gè)subject當(dāng)然也可以被不同的processor處理,所以可以單獨(dú)自定義processor
實(shí)現(xiàn)Processor接口,設(shè)置支持的subject,實(shí)現(xiàn)處理該subject的邏輯
具體擴(kuò)展實(shí)踐請(qǐng)參考 使用sureness30分鐘搭建權(quán)限項(xiàng)目--sample-tom
參與貢獻(xiàn)
非常歡迎參與項(xiàng)目貢獻(xiàn),跟sureness一起走得更遠(yuǎn)更好。對(duì)項(xiàng)目代碼有疑問(wèn)或者建議請(qǐng)直接聯(lián)系 @tomsun28
倉(cāng)庫(kù)的組成部分:
sureness的核心代碼--sureness-core
使用sureness10分鐘搭建權(quán)限項(xiàng)目--sample-bootstrap
使用sureness30分鐘搭建權(quán)限項(xiàng)目--sample-tom
各個(gè)框架使用sureness的樣例項(xiàng)目(javalin,ktor,quarkus)--samples
下載地址
人氣源碼
若依后臺(tái)管理系統(tǒng) RuoYi v4.7.8
CryptoJS加密庫(kù)(crypto.js) v4.2.0
JetLinks開(kāi)源物聯(lián)網(wǎng)平臺(tái)源碼 v2.2.0
Jeepay開(kāi)源支付系統(tǒng) v2.4.0
JSH_ERP 開(kāi)源版J2EE進(jìn)銷存系統(tǒng)代碼源碼 v1.0.2
QQ 聊天機(jī)器人小薇(XiaoV) v2.2.2
ECharts JavaScript圖表庫(kù) v5.6.0
因酷時(shí)代(inxedu)在線教育系統(tǒng) V2.0.6
Javashop B2C開(kāi)源電商系統(tǒng) v6.3.2
iBizEAM開(kāi)源設(shè)備資產(chǎn)管理系統(tǒng)源碼 v1.0
相關(guān)文章
-
Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0
SOFAArk 是一款基于 Java 實(shí)現(xiàn)的動(dòng)態(tài)熱部署和輕量級(jí)類隔離框架,由螞蟻集團(tuán)開(kāi)源貢獻(xiàn),主要提供應(yīng)用模塊的動(dòng)態(tài)熱部署和類隔離能力。歡迎需要的朋友下載使用...
-
SpringBlade微服務(wù)開(kāi)發(fā)平臺(tái) v4.4.0
SpringBlade 是一個(gè)由商業(yè)級(jí)項(xiàng)目升級(jí)優(yōu)化而來(lái)的SpringCloud分布式微服務(wù)架構(gòu)、SpringBoot單體式微服務(wù)架構(gòu)并存的綜合型項(xiàng)目,采用Java8 API重構(gòu)了業(yè)務(wù)代碼,完全遵循阿里巴...
-
Diboot輕代碼開(kāi)發(fā)平臺(tái) v2.11.0
Diboot輕代碼開(kāi)發(fā)平臺(tái)是一個(gè)面向開(kāi)發(fā)人員的低代碼開(kāi)發(fā)平臺(tái),將重復(fù)性的工作自動(dòng)化,提高質(zhì)量、效率、可維護(hù)性...
-
RuoYi-activiti工作流平臺(tái)源碼 v4.1
RuoYi-activiti是一款以若依開(kāi)源權(quán)限管理系統(tǒng)為基礎(chǔ)開(kāi)發(fā)平臺(tái)并集成了activiti框架完成的工作流系統(tǒng),旨在打造集流程設(shè)計(jì)、流程部署、流程執(zhí)行、任務(wù)辦理、流程監(jiān)控于一體的...
-
RuoYi若依權(quán)限管理系統(tǒng) v4.7.9
RuoYi若依權(quán)限管理系統(tǒng)是一個(gè)基于SpringBoot的權(quán)限管理系統(tǒng),代碼易讀易懂、界面簡(jiǎn)潔美觀, 核心技術(shù)采用Spring、MyBatis、Shiro沒(méi)有任何其它重度依賴,喜歡的朋友快來(lái)下載...
-
Java Struts2漏洞復(fù)現(xiàn)工具
今天給大家分享Java Struts2漏洞復(fù)現(xiàn)工具,喜歡的朋友快來(lái)下載體驗(yàn)吧...
-
java操作excel的jar包(jxl.jar包 源碼)
jxl.jar是通過(guò)java操作excel表格的工具類庫(kù),能夠修飾單元格屬性,是由java語(yǔ)言開(kāi)發(fā)而成的,接下來(lái)通過(guò)本文給大家介紹java操作excel的jar包(jxl.jar包 源碼),喜歡的朋友快...
-
springboot整合QuartJob實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理源代碼
Quartz是一個(gè)完全由java編寫(xiě)的開(kāi)源作業(yè)調(diào)度框架,形式簡(jiǎn)易,功能強(qiáng)大,,下面給大家分享springboot整合QuartJob實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理源代碼,感興趣的朋友快來(lái)下載體驗(yàn)吧...
-
SOFABoot開(kāi)源框架 v3.24.0
SOFABoot 是螞蟻集團(tuán)開(kāi)源的基于 Spring Boot 的研發(fā)框架,它在 Spring Boot 的基礎(chǔ)上,提供了諸如 Readiness Check,上下文隔離,類隔離,日志空間隔離等等能力...
-
基于SSM的應(yīng)急資源管理系統(tǒng)源碼 v1.0
應(yīng)急資源管理系統(tǒng)用的是是比較流行的SSM和前端JSP技術(shù),用它來(lái)創(chuàng)建使用腳本語(yǔ)言,結(jié)合HTML代碼來(lái)制作動(dòng)態(tài) 網(wǎng)頁(yè),歡迎需要的朋友下載使用...
下載聲明
☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個(gè)軟件總是不能下載的請(qǐng)?jiān)谠u(píng)論中留言,我們會(huì)盡快修復(fù),謝謝!
☉ 下載本站資源,如果服務(wù)器暫不能下載請(qǐng)過(guò)一段時(shí)間重試!或者多試試幾個(gè)下載地址
☉ 如果遇到什么問(wèn)題,請(qǐng)?jiān)u論留言,我們定會(huì)解決問(wèn)題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請(qǐng)購(gòu)買(mǎi)正版。
☉ 本站提供的sureness認(rèn)證鑒權(quán)框架 v1.0.8資源來(lái)源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。