日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

發(fā)布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:tomsun28

來源:SegmentFault 思否


寫在開頭

看了看這個專欄的最近一篇文章已經(jīng)是兩年前了,時間過得好快。應(yīng)該是出學(xué)校后時間就很快了。兩年前因為用shiro后,自己就按著想法開始做一個認證鑒權(quán)框架 - sureness,想它是針對restful api的,它是易用的,它是沒有框架綁定的。就按著這些想法斷斷續(xù)續(xù)的寫了兩年,中間陸陸續(xù)續(xù)在maven庫發(fā)了10個版本,線上環(huán)境的驗證。開始在這個專欄寫起來,希望有人關(guān)注和使用sureness - https://su.usthe.com


sureness - 面向restful api的認證鑒權(quán)

A simple and efficient open-source jvm security framework that focus on the protection of restful api.

若主頁usthe.com/sureness?訪問不了,請使用備用網(wǎng)站:?su.usthe.com


Background

現(xiàn)在很多網(wǎng)站都進行了前后端分離,后端提供rest api,前端調(diào)用接口獲取數(shù)據(jù)渲染。這種架構(gòu)下如何保護好后端所提供的rest api使得更加重視。api的保護可以認為:認證-請求攜帶的認證信息是否校驗通過,鑒權(quán)-認證通過的用戶擁有指定api的權(quán)限才能訪問此api。然而不僅于此,什么樣的認證策略, jwt, basic,digest,oauth還是多支持, 權(quán)限配置是寫死代碼還是動態(tài)配置,我想動態(tài)賦權(quán)怎么辦,云原生越來越火用的框架是quarkus等新秀不是spring生態(tài)咋弄,http實現(xiàn)不是servlet而是jax-rs規(guī)范咋整, to be or not to be, this is a question.

目前java主流的權(quán)限框架有shiro,spring security, 下面對于它們的探討都是個人之見,接受糾正


shiro對于restful api原生支持不太友好,需要改寫一些代碼,2年前一個項目?booshiro?就是改造shiro,使其在過濾鏈就能匹配不同的rest請求進行權(quán)限校驗,之后給shiro commit幾次pr,fix其在過濾鏈匹配時的危險漏洞,總的來說shiro很強大但其起源并非面向web,對restful不是很友好


spring security很強大,與spring深度集成,離開spring,比如javalin和之前用過的osgi框架karaf就用不了了


如果不用注解配置,它們都會在鏈式匹配這塊,用請求的url和配置的鏈一個一個ant匹配(匹配過程中會有緩存等提高性能),但匹配的鏈過多時還是比較耗性能(根據(jù)算法時間復(fù)雜度判斷,暫未測試驗證)


我們希望能解決這些,提供一個針對restful api,無框架依賴,可以動態(tài)修改權(quán)限,多認證策略,更快速度,易用的認證鑒權(quán)框架


Introduction

sureness?是我們在使用?java?權(quán)限框架?shiro?之后,吸取其良好設(shè)計加上一些想法實現(xiàn)的全新認證鑒權(quán)項目


面對?restful api?的認證鑒權(quán),基于?rbac?(用戶-角色-資源)主要關(guān)注于對?restful api?的安全保護


無特定框架依賴(本質(zhì)就是過濾器處攔截判斷,已有springboot,quarkus,javalin,ktor等demo)


支持動態(tài)修改權(quán)限配置(動態(tài)修改哪些api需要被認證,可以被誰訪問)


支持主流http容器 servlet 和 jax-rs


支持多種認證策略,?jwt, basic auth?... 可擴展自定義支持的認證方式


基于改進的字典匹配樹擁有的高性能


良好的擴展接口, demo和文檔


sureness的低配置,易擴展,不耦合其他框架,能使開發(fā)者對自己的項目多場景快速安全的進行保護

Framework Sample Support
  • spring?sample-bootstrap
  • springboot?sample-tom
  • quarkus?sample-quarkus
  • javalin?sample-javalin
  • ktor?sample-ktor
  • spring webflux?sample-spring-webflux
  • more samples todo


快速開始

使用前一些約定
  • sureness盡量簡潔,基于rbac,只有(角色-資源)的映射,沒有(權(quán)限)動作映射,即 用戶-角色-資源
  • 我們將restful api請求視作一個資源,資源格式為:?requestUri===httpMethod?即請求的路徑加上其請求方式(post,get,put,delete...) 作為一個整體被視作一個資源?eg: /api/v2/book===get?get方式請求/api/v2/book接口數(shù)據(jù)
  • 角色資源映射: 用戶所屬角色--角色擁有資源--用戶擁有資源(用戶就能訪問此api)
項目中加入sureness
  1. 項目使用maven構(gòu)建,加入maven坐標
 com.usthe.sureness sureness-core 0.1
  1. 項目使用gradle構(gòu)建,gradle坐標
compile group: 'com.usthe.sureness', name: 'sureness-core', version: '0.1'
  1. 項目為普通工程,加入sureness-core.jar依賴

在 mvnrepository 下載jar?https://mvnrepository.com/artifact/com.usthe.sureness/sureness-core

添加攔截所有請求的過濾器入口

入口攔截器器實現(xiàn)一般可以是?filter or spring interceptor?在攔截器加入sureness的安全過濾器,如下:


入口,一般放在攔截所有請求的filter:

SurenessSecurityManager.getInstance().checkIn(servletRequest)

實現(xiàn)相關(guān)異常處理

sureness使用異常處理流程,我們需要對checkIn拋出的異常做自定義處理,
安全過濾器,認證鑒權(quá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) {     // 認證失敗相關(guān)異常 } catch (UnauthorizedException e5) {     // 鑒權(quán)失敗相關(guān)異常 } catch (RuntimeException e) {    // 其他自定義異常 }
加載配置數(shù)據(jù)

sureness認證鑒權(quán),當(dāng)然也需要我們配置自己的配置數(shù)據(jù) - 賬戶數(shù)據(jù),角色權(quán)限數(shù)據(jù)等 這些配置數(shù)據(jù)可能來自文本,關(guān)系數(shù)據(jù)庫,非關(guān)系數(shù)據(jù)庫 我們提供了配置數(shù)據(jù)接口SurenessAccountProvider,?PathTreeProvider, 用戶可以實現(xiàn)此接口實現(xiàn)自定義配置數(shù)據(jù)源 當(dāng)前我們也提供默認文本形式的配置數(shù)據(jù)實現(xiàn)?DocumentResourceDefaultProvider, 用戶可以配置sureness.yml來配置數(shù)據(jù) 默認文本數(shù)據(jù)源sureness.yml配置詳見文檔?默認數(shù)據(jù)源

我們提供了使用代碼DEMO:默認文本數(shù)據(jù)源具體實現(xiàn),請參考使用sureness10分鐘搭建權(quán)限項目--sample-bootstrap

若權(quán)限配置數(shù)據(jù)來自數(shù)據(jù)庫,請參考使用sureness30分鐘搭建權(quán)限項目--sample-tom


HAVE FUN

非常歡迎參與項目使用和貢獻,幫助sureness走得更遠更好。對項目代碼有疑問或者建議請直接聯(lián)系 @tomsun28


-?END -

總結(jié)

以上是生活随笔為你收集整理的java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。