自定义Shiro拦截器,实现角色多选一

本文介绍了为何以及如何自定义Shiro的拦截器,以实现更灵活的角色权限管理。通过覆盖默认的拦截器如RolesAuthorizationFilter,并使用自定义的拦截器,可以实现对用户角色的多选一授权。在配置中替换默认拦截器并注意在授权时正确处理Role和Perms的区别。
摘要由CSDN通过智能技术生成

为什么自定义Shiro的拦截器

Shiro自带的拦截器,一个请求只能赋予一个角色或者一个组合角色。
例如:
filterChainDefinitionMap.put("/user/*","roles[user,admin]");  表示只有同时获得user和admin的角色才能访问/user/*

但是实际中,需要/user/* 的请求user和admin角色都可以访问,那么就需要自定义拦截器

怎么自定义Shiro的拦截器

默认的拦截器

所有的拦截器都继承了AccessControlFilter类

继承了AccessControlFilter类的拦截器有下图中的几种:
在这里插入图片描述

默认使用的拦截器是:RolesAuthorizationFilter

在默认的拦截器中,roles[user,admin] 表示user加上admin的组合角色

    public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
   

        Subject subject = getSubject(request, response);
        String[] rolesArray = (String[]) mappedValue;

        if (rolesArray == null || rolesArray.length == 0) {
   
            //no roles specified, so nothing to check - allow access.
            return true;
        }

        Set<String> roles = CollectionUtils.asSet(rolesArray);  //将所有的权限加起来的组合权限
        return subject.hasAllRoles(roles);
    }

CollectionUtils.asSet()方法

    public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值