shiroFilter配置文件详解关于默认的and关系改为or



由于shiro默认对于角色授权的拦截是and关系,只有当该用户拥有配置的一个多个角色是才可通过

/user/add = roles["admin,test"]
当该角色同时拥有这两个角色时才可进入user/add的页面中

这显然是不够我们使用的,但是我们可以自定义一个filter实现or关系

自定义的shiroOrFilter如下

/**
 * 自定义校验规则(or)
 * 只要满足其中一个角色即可了
 */
public class CustomRolesAuthorizationFilter extends AuthorizationFilter {
    @Override
	protected boolean isAccessAllowed(ServletRequest request,
			ServletResponse response, Object mappedValue) throws Exception {
		Subject subject = getSubject(request, response);
		String[] rolesArray = (String[]) mappedValue;

        if (rolesArray == null || rolesArray.length == 0) {
            return true;
        }
        for (String aRolesArray : rolesArray) {
            if (subject.hasRole(aRolesArray)) {
                return true;
            }
        }
        return false;
    }
}
shiro配置中这样写

<pre name="code" class="java"><!-- 因为shiro的角色控制在shiroFilter需要满足and逻辑,此处我们自定义一个满足or逻辑的-->
    <bean id="cRole" class="gcu.shiro.CustomRolesAuthorizationFilter" />
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" depends-on="cRole">
    <property name="loginUrl" value="/user/index"/>
    <property name="securityManager" ref="securityManager"/>
    <property name="unauthorizedUrl" value="/user/noAuthority"/>
    <property name="filters">
        <map>
            <entry key="cRole" value-ref="cRole"/>
        </map>
    </property>
    <property name="filterChainDefinitions">
        <value>
            /css/** = anon
            /font/** = anon
            /images/** = anon
            /js/** = anon
            /user/index = anon
            /user/login = anon

            /**/add = cRole["ADMIN,SUPER"]
            /**/list = cRole["ADMIN,SUPER"]

            /**/edit/**= cRole[SUPER]
            /**/del/**= cRole[SUPER]

            /** = authc
        </value>
    </property>
</bean>


 
此处要注意,之前的roles要被cRole所替代,否则过滤不成功

/user/add = cRole["admin,test"]
</pre><pre code_snippet_id="1898542" snippet_file_name="blog_20160924_7_7731479" name="code" class="java">
此时只要满足一个角色就可以访问了


shiro 最基本的demo 实现了权限、角色、等的管理。但没有使用本文介绍的角色问题,此demo权限更加细粒化

shiro demo  https://github.com/haois/shiro-rbac-demo.git(spring springmvc mybatis maven)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值