前後端分離下的用戶認證和鑒權實踐(三) Shiro簡介
Shiro
- Apache Shiro 是一個強大易用的 Java 安全框架,提供了認證、授權、加密和會話管理等功能,對於任何一個應用程序,Shiro 都可以提供全面的安全管理服務。並且相對於其他安全框架,Shiro 要簡單的多,可以與Spring進行無縫集成。
Shiro的幾個關鍵概念
- Subject:一個安全術語,意指「當前用戶」,這裡的用戶可以指人、第三方進程等其他事物。一旦獲得Subject,你就可以立即獲得你希望用Shiro為當前用戶做的90%的事情,如登錄、登出、訪問會話、執行授權檢查等 -。這裡的關鍵點是Shiro的API非常直觀,因為它反映了開發者以『每個用戶』思考安全控制的自然趨勢。同時,在代碼的任何地方都能很輕鬆地訪問Subject,允許在任何需要的地方進行安全操作。
Subject subject = SecurityUtils.getSubject();
subject.login(token);
- SecurityManager:shiro框架的核心,管理所有用戶更的安全操作,引用了多個內部嵌套安全組件(如Session的管理器,Realm等)
@Bean(name = "securityManager")
public DefaultWebSecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//設置Realm
securityManager.setRealm(shiroRealm());
//設置session管理器
securityManager.setSessionManager(sessionManager());
return securityManager;
}
- Realm:Realm充當了Shiro與應用安全數據間的「橋樑」或者「連接器」,也就是說,當與用戶帳戶這類安全相關數據進行交互,執行認證(登錄)和授權(訪問控制)時,Shiro會從應用配置的Realm中查找很多內容。Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,並在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用於認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。Realm有兩個關鍵方法doGetAuthenticationInfo(AuthenticationToken authenticationToken)執行認證邏輯;
doGetAuthorizationInfo(PrincipalCollection principalCollection)執行授權邏輯。@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//賦予角色和許可權
}
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
//用戶認證
}
- Filter鏈:Shiro通過其創新的URL過濾器鏈功能支持安全特定的過濾規則,它允許你為任何匹配的URL模式指定非正式的過濾器鏈。
filterChainDefinitionManager.put("/userInfo","authc"); //需要登錄
filterChainDefinitionManager.put("/jobs/**","perms[JOB:CREATE]"); //需要[JOB:CREATE]許可權
filterChainDefinitionManager.put("/admin/**","roles[Admin]"); //需要Admin角色
相關資料
- 簡介
- 教程
- Filter鏈
詳情請見:
項目地址
博客地址
前端分離下的用戶認證和鑒權實踐
前後端分離下的用戶認證和鑒權實踐(一) 概述
前後端分離下的用戶認證和鑒權實踐(二) 許可權粒度的設計
前後端分離下的用戶認證和鑒權實踐(三) Shiro簡介
前後端分離下的用戶認證和鑒權實踐(四) 基於shiro的後端認證和鑒權
前後端分離下的用戶認證和鑒權實踐(五) 用戶登錄狀態的保持和單點登錄
前後端分離下的用戶認證和鑒權實踐(六) 前端的路由控制和動態渲染
推薦閱讀: