今天在练习一个项目时,用到了shiro框架,刚开始在web.xml中把shiro过滤器的声明放到了struts2过滤器的后面,然后在spring配置文件中注入shiro的URL拦截规则,运行时发现并没有按照预想的规则进行拦截。经过一段时间调试后,发现书上web.xml的配置是把shiro的过滤器声明放到了最前面,然后我也试着把shiro的声明放到了struts过滤器声明的前面,最后成功进行了拦截。想问一下web.xml中shiro过滤器和Struts2过滤器配置的是不是存在先后顺序问题?希望知道原理的大佬能解答一下。
spring配置文件中用到的shiro拦截规则如下:
<!-- 配置一个bean用于创建shiro框架用的过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 注入安全管理器 -->
<property name="securityManager" ref="securityManager"></property>
<!-- 注入当前系统登录页面 -->
<property name="loginUrl" value="/login.jsp"></property>
<!-- 注入登录成功页面 -->
<property name="successUrl" value="/index.jsp"></property>
<!-- 注入权限不足页面 -->
<property name="unauthorizedUrl" value="/unauthorizedUrl.jsp"></property>
<!-- 注入URL拦截规则 -->
<property name="filterChainDefinitions">
<value>
/login.jsp* = anon
/userAction_login.action = anon
/* = authc
</value>
</property>
</bean>
在页面点击登录后,会跳到index.jsp,由于在index.jsp中我用了重定向,书上说会被最后一个拦截规则拦截,需要认证通过才能访问,所以要会跳转到登录页面。而开始我在web.xml文件中吧shiro的过滤器声明放到了最后面,发现并没有被拦截,直接访问到了主页。而把shiro的声明放到struts过滤器声明的前面时,却能被正确拦截。有点不太明白。。想请教一下。