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的後端認證和鑒權

前後端分離下的用戶認證和鑒權實踐(五) 用戶登錄狀態的保持和單點登錄

前後端分離下的用戶認證和鑒權實踐(六) 前端的路由控制和動態渲染

推薦閱讀:

相關文章