使用Apache shiro进行权限管理时如何对同一个URL配置多个角色的或关系
来源:互联网 发布:unity3d文件解包工具 编辑:程序博客网 时间:2024/05/16 11:52
在开发web应用时,通常会对一个用户分配某个角色。该角色拥有一定的权限,那么需要进行
权限管理。在进行权限管理的时候,常常会遇到不同角色的用户访问相同URL的情况。如果只有部
分角色访问该URL,那么需要限制只有这些角色才可以访问该URL。
在这种情况下,涉及的是角色之间的或关系的管理。因为一般情况下,一个用户通常只有一个
角色。shiro的过滤中有个RolesAuthorizationFilter过滤器,对应的过滤器名为roles。当配置如
roles["admin,test"]时,表示的是当前用户角色必须既是admin,也是test。也就是说该过滤器的角色
控制是且的关系。若要实现或的关系,可以自己实现一个过滤器,实现或逻辑。
实现方式很简单,实现AuthorizationFilter类就行了。实现如下
<span style="font-size:14px;">import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.apache.shiro.subject.Subject;import org.apache.shiro.web.filter.authz.AuthorizationFilter;// AuthorizationFilter抽象类事项了javax.servlet.Filter接口,它是个过滤器。public class CustomRolesAuthorizationFilter extends AuthorizationFilter {@Overrideprotected boolean isAccessAllowed(ServletRequest req, ServletResponse resp, Object mappedValue) throws Exception {Subject subject = getSubject(req, resp);String[] rolesArray = (String[]) mappedValue;if (rolesArray == null || rolesArray.length == 0) { //没有角色限制,有权限访问return true;}for (int i = 0; i < rolesArray.length; i++) {if (subject.hasRole(rolesArray[i])) { //若当前用户是rolesArray中的任何一个,则有权限访问return true;}}return false;}}</span>
通过Spring框架将该过滤器添加到shiro权限管理中
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"default-lazy-init="true"><!-- Shiro Filter --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" depends-on="roleOrFilter"> <!-- 添加各种验证过滤器 --> <property name="filters"> <map> <entry key="roleOrFilter" value-ref="roleOrFilter"/> </map> </property> <!-- 添加对各种请求执行的过滤操作 --> <property name="filterChainDefinitions"> <value> <!-- 当前用户的角色必须是comm或test才有权限执行该URL请求 --> /user!query.action = authc,roleOrFilter["comm,test"] </value> </property> </bean><!-- 自定义的过滤器,用来判断当前用户是否是roleOrFilter["comm,test"]中的某个角色 --><bean id="roleOrFilter" class="com.test.shiro.CustomRolesAuthorizationFilter" /></beans></span>
此时当当前用户的角色为comm或test时,有权访问/user!query.action,若既不是comm,也不是
test,则无权访问/user!query.action。
1 0
- 使用Apache shiro进行权限管理时如何对同一个URL配置多个角色的或关系
- shiro角色( roles)自定义Filter----同一个URL配置多个角色的或关系
- spring-shiro实现角色(roles)自定义Filter----配置多个角色的或关系
- shiro多角色访问同一个url
- linux对多个用户或多个组进行权限管理
- linux对多个用户或多个组进行权限管理
- 使用shiro进行权限管理
- 使用shiro进行权限管理
- 使用shiro进行权限管理
- 使用shiro进行权限管理
- Shiro的权限、角色、用户管理
- 【Shiro权限管理】5. Shiro权限URL 配置细节
- 如何在spring项目中使用shiro进行权限管理
- Apache Shiro 角色和权限
- Apache Shiro 权限管理
- Shiro之urls配置多个角色
- 【shiro】基于url的权限管理和shiro的对比
- 在apache中配置多个站点使用同一个ip
- Windows客户端C/C++编程规范“建议”——前言
- KMP算法之总结篇(转)
- Split用法
- java痛苦学习之路[九]---Java Annotation
- 题目:求1+2+…+n,
- 使用Apache shiro进行权限管理时如何对同一个URL配置多个角色的或关系
- Android中shape的使用
- 本月有几天
- Beijing_1954转WGS_1984 Geographic Transformation (optional)选项如何选择
- shell介绍
- C/C++ Source Code Analysis
- TypeError: unbound method must be called with class instance 1st argument
- android 调用系统照相机
- android shape的使用 2