今天做项目时,使用拦截器对用户权限检查。拦截器本身没有问题,可是实现权限拦截,但是传递的参数全部都无效了。搞了很久,由于对拦截器的内部机制不是特别熟悉,所以重新研读了一下Struts2的拦截器。找到了原因:给一个Acton配置一个自定义拦截器后,此action就无法使用框架默认的拦截器栈了,这就导致前后台数据传输无效。
解决方法一般有两种:
一、显示的使用默认拦截器
<action name="enterSystem_*" class="enterSystemManager" method="{1}">
<!-- 使用拦截器:进行权限检查 -->
<interceptor-ref name="defaultStack" />
<interceptor-ref name="autority" />
<result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result>
<result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result>
</action>
二、使用<interceptor-refname="params"/>让参数先传递
<action name="enterSystem_*" class="enterSystemManager" method="{1}">
<!-- 使用拦截器:进行权限检查 -->
<interceptor-ref name="params" />
<interceptor-ref name="autority" />
<result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result>
<result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result>
</action>
本文介绍Struts2中自定义拦截器导致默认拦截器失效的问题,并提供两种解决方案:一是显式使用默认拦截器;二是先用params拦截器确保参数传递。
4702

被折叠的 条评论
为什么被折叠?



