AOP MethodInterceptor打破了struts2 Action / page

时间:2013-12-31 17:30:10

标签: spring struts2 aop spring-aop

我对struts2和aop有一个奇怪的问题。我需要拦截某些struts2操作来检查一些自定义设置。这些操作被截获,但它会破坏所有页面参数/表单值等:

AOP配置是:

<aop:advisor id="associateModuleCheck"  advice-ref="associateModuleAdvice"  pointcut="execution(* uk.co.company.package.webapp.action.*.ModuleA*.*(..))" order="1"/>

方法拦截器

public Object invoke(MethodInvocation invocation) throws Throwable {
        Class<?> targetClass = invocation.getThis().getClass();
        // DO stuff 
        return invocation.proceed();
}

基本上我可以看到动作方法被截获,但当它返回到页面时,它会破坏所有表单值。 (有些动作甚至无法到达MethodInterceptor方法,但我可以从Spring日志中看到它基本上被拦截了):

  

候选人是:&#39; /namespacebbb/ModuleAction/method.action' ;;模式是   / **;匹配=真

我之所以不使用Struts2拦截器,是因为我可以使用Spring AOP一次配置大量动作。

如果我删除拦截器一切正常。以前有人做过这个吗?知道什么是错的吗?

更新

虽然我最终使用了struts2拦截器,但这个问题仍然存在。我找到了这个春季论坛问题,这与我的问题非常相似:

http://forum.spring.io/forum/spring-projects/aop/38625-aop-struts-2-help

1 个答案:

答案 0 :(得分:0)

经过一番挖掘后,我想我发现了这个问题(如果你使用Spring来帮助AOP,即使你不是你可能需要一个不同的ObjectFactory),还有它的长短之处是你需要确保struts ObjectFactory设置正确:

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/>

<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/>

来源:http://www.javawebdevelop.com/3294124/