我想对所有以特定名称开头的动作使用struts2拦截器:
假设我要拦截以模块开头的所有操作。有没有什么方法可以配置像Spring AOP 那样的拦截器,例如:com.acme.web.actions.Module*
我无法使用AOP,因为它会破坏所有页面参数(因为我猜在那里调用params拦截器是没有办法的。)
这可能吗?
答案 0 :(得分:1)
在Struts中,您可以定义不同的拦截器堆栈和apply different stacks to different actions。
所以在你的情况下你可以像这样定义一个不同的堆栈:
<interceptors>
<interceptor name="myInterceptor" class="com.company.security.MyInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
并且,使用wildcard mappings,下面的配置基本上是“将名为ModuleSomething的所有操作映射到类com.acme.web.actions.ModuleSometing,并将myStack拦截器应用于它:
<action name="Module*" class="com.acme.web.actions.Module{1}">
<result>{1}.jsp</result>
<interceptor-ref name="myStack"/>
</action>