遇到问题----shrio------shiro自定义filters无效
- UID
- 1066743
|
遇到问题----shrio------shiro自定义filters无效
shiro 自定义filters无效
这种情况主要分成两个原因
一是shiro本身的配置有问题,就是shiro未生效。
这种情况建议重新检查一遍shiro的搭建。先不自定义filers。
参考链接:
springMVC与shiro集成
二是拦截顺序设置的有问题
shiro每个URL配置,表示匹配该URL的应用程序请求将由对应的过滤器进行验证。
例如:
[urls]
/index.html = anon
/user/create = anon
/user/** = authc
/admin/** = authc, roles[administrator]
/rest/** = authc, rest
/remoting/rpc/** = authc, perms["remote:invoke"]
URL表达式说明
1、URL目录是基于HttpServletRequest.getContextPath()此目录设置
2、URL可使用通配符,**代表任意子目录
3、Shiro验证URL时,URL匹配成功便不再继续匹配查找。所以要注意配置文件中的URL顺序,尤其在使用通配符时。
Filter Chain定义说明
1、一个URL可以配置多个Filter,使用逗号分隔
2、当设置多个过滤器时,全部验证通过,才视为通过
3、部分过滤器可指定参数,如perms,roles
大家注意到
Shiro验证URL时,URL匹配成功便不再继续匹配查找。
如果我们把/**放在其他/student/**前面,则只会进入/**的拦截,不会再进去/student/**的拦截了。
所以需要注意filterChainDefinitions中的顺序,越仔细的路径应该放在越前面。
/**=athuc尤其不能放在最前,否则就不会进roles的拦截了。
错误的顺序
<property name="filterChainDefinitions">
<value>
/**/*.* = anon
/login = anon
/** = authc
/student/** =roles["admin,normal,assistant"]
/teacher/** =roles["admin,normal,assistant"]
/class/** =roles["admin,normal,assistant"]
/grade/** =roles["admin,normal"]
</value>
</property>
正确的拦截顺序
<property name="filterChainDefinitions">
<value>
/**/*.* = anon
/login = anon
/student/** =roles["admin,normal,assistant"]
/teacher/** =roles["admin,normal,assistant"]
/class/** =roles["admin,normal,assistant"]
/grade/** =roles["admin,normal"]
/** = authc
</value>
</property> |
|
|
|
|
|