为什么要自定义filter
在文章Shiro简介中列举了多种Shiro本身自带的过滤器,可以通过配置XML里的url进行权限管理,例如
过滤器名称 | 过滤器作用 | 对应Class |
---|---|---|
perms | 需要权限 | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter |
roles | 需要角色 | org.apache.shiro.web.filter.authz.RolesAuthorizationFilter |
可以对其传入一组数组来进行控制
1 | /user/**/insert = authc, roles[su,admin], perms[write,read] |
但是数组之间的关系是 AND关系,可惜的是Shiro自身并没有提供 OR关系 的过滤器,可以通过自定义过滤器的形式来完成
过滤器逻辑
自定过滤器需要实现AuthorizationFilter接口然后对方法 isAccessAllowed 进行重写,具体可以参考Shiro的源代码
1 |
|
配置自定义过滤器
在XML的配置中,基于URL进行权限控制的shiroFilter配置自定义过滤器
1 | //首先在Spring中配置自定义过滤器 |