大家好,我是 Java 陳序員。許可權認證是我們日常開發繞不過的話題,這是因為我們的應用程式需要防護,防止被竄入和攻擊。 在 Java 後端開發中,實現許可權認證有很多種方案可以選擇,一個攔截器、過濾器也許就可以輕鬆搞定。當然,現在也有很多成熟的框架,供我們選擇。輕量的 Shiro,Spring 家族的 ...
大家好,我是 Java 陳序員
。許可權認證是我們日常開發繞不過的話題,這是因為我們的應用程式需要防護,防止被竄入和攻擊。
在 Java
後端開發中,實現許可權認證有很多種方案可以選擇,一個攔截器、過濾器也許就可以輕鬆搞定。當然,現在也有很多成熟的框架,供我們選擇。輕量的 Shiro
,Spring
家族的 SpringSecurity
,是目前比較流行的框架。當然,二者孰優孰劣,仁者見仁智者見智!
隨著業務的複雜和系統功能架構的演進,許可權認證不再僅僅是登錄授權的常規操作。而是要考慮到多種多樣的場景,單點登錄、前後端分離、記住密碼、踢人下線等等。
今天要介紹的項目是史上功能最全的 Java
許可權認證框架 —— Sa-Token
.涵蓋各種許可權認證場景,有完善的文檔和 SDK
,可以輕鬆的集成到我們項目中使用!當然,也是我們可以學習的優秀開源項目!
項目介紹
Sa-Token
是一個輕量級 Java
許可權認證框架,主要解決:登錄認證、許可權認證、單點登錄、OAuth2.0
、分散式 Session
會話、微服務網關鑒權等一系列許可權相關問題。
目前已集成——登錄認證、許可權認證、分散式 Session
會話、微服務網關鑒權、單點登錄、OAuth2.0
、踢人下線、Redis
集成、前後臺分離、記住我模式、模擬他人賬號、臨時身份切換、賬號封禁、多賬號認證體系、註解式鑒權、路由攔截式鑒權、花式 token
生成、自動續簽、同端互斥登錄、會話治理、密碼加密、jwt
集成、Spring
集成、WebFlux
集成。
項目地址:
https://github.com/dromara/Sa-Token
線上文檔:
https://sa-token.cc/
功能介紹
Sa-Token
目前主要五大功能模塊:登錄認證、許可權認證、單點登錄、OAuth2.0
、微服務鑒權。
-
登錄認證:多端登錄、單端登錄、同端互斥登錄、七天免登錄等多種登錄策略只需改個配置即可完成
-
許可權認證:許可權認證、角色認證、會話二級認證、註解鑒權、路由鑒權等多種姿勢靈活鑒權
-
單點登錄:同域、跨域、共用
Redis
、跨Redis
、前後端一體、前後端分離等提供各種架構下的SSO
接入方案 -
OAuth2.0
:輕鬆搭建OAuth2.0
認證中心,支持四種授權模式,支持openid
授權機制,支持二次擴展開發 -
微服務鑒權:分散式
Session
會話、網關統一鑒權、RPC
調用鑒權等,提供開箱即用的微服務認證方案
SpringBoot 環境集成
項目依賴
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.37.0</version>
</dependency>
配置文件
sa-token:
# token 名稱(同時也是 cookie 名稱)
token-name: satoken
# token 有效期(單位:秒) 預設30天,-1 代表永久有效
timeout: 2592000
# token 最低活躍頻率(單位:秒),如果 token 超過此時間沒有訪問系統就會被凍結,預設-1 代表不限制,永不凍結
active-timeout: -1
# 是否允許同一賬號多地同時登錄 (為 true 時允許一起登錄, 為 false 時新登錄擠掉舊登錄)
is-concurrent: true
# 在多人登錄同一賬號時,是否共用一個 token (為 true 時所有登錄共用一個 token, 為 false 時每次登錄新建一個 token)
is-share: true
# token 風格(預設可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
token-style: uuid
# 是否輸出操作日誌
is-log: true
代碼實現
登錄功能實現
public String doLogin(String username, String password){
// 此處僅作模擬示例,真實項目需要從資料庫中查詢數據進行比對
if("admin".equals(username) && "admin".equals(password)) {
StpUtil.login(10001);
return "登錄成功";
}
return "登錄失敗";
}
判斷是否登錄
public String isLogin() {
return "當前會話是否登錄:" + StpUtil.isLogin();
}
最後
推薦的開源項目已經收錄到 GitHub
項目,歡迎 Star
:
https://github.com/chenyl8848/great-open-source-project
或者訪問網站,進行線上瀏覽:
https://chencoding.top:8090/#/
大家的點贊、收藏和評論都是對作者的支持,如文章對你有幫助還請點贊轉發支持下,謝謝!