实现流程
- 我们在 Spring-shiro.xml 中配置过滤规则.
<!--商品查询需要商品查询权限 ,取消url拦截配置,使用注解授权方式 -->
/items/queryItems.action = perms[item:query]
如果有多个权限, 用逗号分隔perms[item:query,.....]
- 用户在认证通过后,请求
/items/queryItems.action
url - 被
PermissionsAuthorizationFilter
拦截, 拦截后发现需要item:query
权限. -
PermissionsAuthorizationFilter
调用 realm 中的doGetAuthorizationInfo
方法.获取数据库正确权限. -
PermissionsAuthorizationFilter
对item:query
权限 和 从 realm 中获取的权限进行对比, 如果item:query
在 realm 返回的权限列表中, 则授权通过.
注意: 如果授权失败会跳转到refuse.jsp
页面.
<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面-->
<property name="unauthorizedUrl" value="/refuse.jsp" />
问题总结
- 在 spring-shiro.xml 中配置过滤器链接, 需要将全部 URL 和权限对应起来进行配置, 比较麻烦.
- 每次授权都需要调用 realm 查询数据, 对系统性能有很大影响, 可以通过 shiro 缓存来解决.