Struts2拦截器基于特定的URl模式

时间:2014-01-02 09:47:32

标签: struts2 struts2-interceptors

我想对所有以特定名称开头的动作使用struts2拦截器:

假设我要拦截以模块开头的所有操作。有没有什么方法可以配置像Spring AOP 那样的拦截器,例如:com.acme.web.actions.Module*

我无法使用AOP,因为它会破坏所有页面参数(因为我猜在那里调用params拦截器是没有办法的。)

这可能吗?

1 个答案:

答案 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>