我想对所有以特定名称开头的操作使用 struts2 拦截器:
假设我想拦截所有以Module开头的动作。有什么方法可以像 Spring AOP那样配置拦截器,例如:com.acme.web.actions.Module*
我不能使用 AOP,因为它会破坏所有页面参数(因为我猜那里无法调用 params 拦截器)。
这可能吗?
我想对所有以特定名称开头的操作使用 struts2 拦截器:
假设我想拦截所有以Module开头的动作。有什么方法可以像 Spring AOP那样配置拦截器,例如:com.acme.web.actions.Module*
我不能使用 AOP,因为它会破坏所有页面参数(因为我猜那里无法调用 params 拦截器)。
这可能吗?
在 Struts 中,您可以定义不同的拦截器堆栈并将不同的堆栈应用于不同的操作。
因此,在您的情况下,您可以像这样定义不同的堆栈:
<interceptors>
<interceptor name="myInterceptor" class="com.company.security.MyInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
并且,使用通配符映射,下面的配置本质上是“将所有名为 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>