之五 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

推荐阅读