之五 2流高手速成記:Springboot整合Shiro實現安全管理( 三 )

內容很簡單:

login——登錄方法
logout——登出方法
admin、user——兩個測試方法 , 用于測試不同角色對于不同方法可訪問的細粒度控制
7. ShiroConfig配置類創建 , 實現用戶訪問權限的細粒度控制package com.example.hellospringboot.configure;import com.example.hellospringboot.realm.MyAuthorizingRealm;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.realm.Realm;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.LinkedHashMap;import java.util.Map;@Configurationpublic class ShiroConfig {@Beanpublic SecurityManager securityManager(Realm realm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(realm);return securityManager;}@Beanpublic MyAuthorizingRealm getRealm() {MyAuthorizingRealm realm = new MyAuthorizingRealm();return realm;}@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();shiroFilter.setSecurityManager(securityManager);Map<String, String> filterChainMap = new LinkedHashMap<String, String>();filterChainMap.put("/user/login", "anon");filterChainMap.put("/user/logout", "anon");filterChainMap.put("/user/admin", "authc,roles[admin],perms[admin:read]");filterChainMap.put("/user/user", "authc,roles[user],perms[user:read]");shiroFilter.setFilterChainDefinitionMap(filterChainMap);return shiroFilter;}}securityManager 和 getRealm 顯示指定了Shiro兩大組件的實例聲明
shiroFilterFactoryBean 則是實現角色訪問權限控制的重要方法
filterChainMap.put("/user/login", "anon"); // 代表login方法可以匿名訪問
filterChainMap.put("/user/logout", "anon"); // 代表logout方法可以匿名訪問
filterChainMap.put("/user/admin", "authc,roles[admin],perms[admin:read]"); // 代表admin方法需要用戶滿足admin角色,同時具備admin:read權限
filterChainMap.put("/user/user", "authc,roles[user],perms[user:read]"); // 代表user方法需要用戶滿足user角色,同時具備user:read權限
至此 , 整個接入流程便結束了
我們再次結合最開始我們配置的數據來對業務邏輯進行分析
用戶 admin,同時具備admin、user兩種角色
用戶 juste,僅具備user一種角色
角色 admin,同時具備admin:write、admin:read兩種權限
角色 user,同時具備user:write、user:read兩種權限
因此
用戶 admin,同時具備admin:write、admin:read、user:write、user:read 四種操作權限
用戶 juste,同時具備user:write、user:read兩種操作權限
大家理清楚這其中的關系了嗎?^ ^
8. 執行Postman驗證結果
之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖
我們在執行login之前 , admin方法無權訪問
之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖

之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖

之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖
登錄admin之后,同時具備admin和user方法的訪問權限
之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖

之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖

之五 2流高手速成記:Springboot整合Shiro實現安全管理

文章插圖
logout登出,然后login登錄普通用戶juste
會發現依然具備user方法的訪問權限,但是失去了admin方法的訪問權限
到此,驗證我們基于Shiro框架的細粒度權限控制已經實現
除了Shiro框架,我們還有另一個選擇,那就是同樣可以通過集成Spring Security框架來達成相同的目的
關于更多Shiro框架的內容,及其和Spring Security之間的異同 , 大家感興趣可以參考這篇文章:
Shiro最全基礎教程_思月行云的博客-CSDN博客
對于Spring Security框架,我們暫且留個懸念,以后會專門再給大家講解這部分內容
下一節,我們將把關注點投向微服務領域,SpringCloudAlibaba將會是接下來幾個章節的重頭戲,敬請期待~
MyAuthorizingRealm

推薦閱讀