web.xml中shiro过滤器和Struts2过滤器配置的是不是存在先后顺序问题

今天在练习一个项目时,用到了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过滤器声明的前面时,却能被正确拦截。有点不太明白。。想请教一下。

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!