更新:我发现基于Spring 2.x批注的Controller对于AOP安全性而言是可怕的,因为由于参数和返回值的自由度增加,您无法对方法原型进行假设.在2.x之前,您可以拦截handleRequest并知道第一个参数是HttpServletRequest,返回值是ModelAndView.该标准使您可以为每个控制器编写简单的建议.现在,映射到请求的方法可以接受任何内容并返回String,ModelAndViews等.
原始帖子:我有一组现有的方面来实现AOPAlliance在Spring中运行的MethodInterceptor.它们通过拦截.handleRequest为我的webapp提供安全性.控制器中的方法,并允许执行或转发到登录页面.
在Spring中使用新的基于注释的控制器时,不再需要实现“ handleRequest”方法.控制器的方法可以命名为我想要的任何名称.这破坏了我现有的安全模型.因此,我如何从中得到:
<bean class="com.xxx.aspects.security.LoginAdvice" name="loginAdvice">
<property name="loginPath">
<value>/login.htm</value>
</property>
<property name="authenticationService" ref="authenticationService" />
</bean>
<bean name="loginAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="loginAdvice" />
<property name="pointcut">
<bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="pattern">
<value>.*handleRequest.*</value>
</property>
</bean>
</property>
</bean>
<bean id="someProtectedController" class="org.springframework.aop.framework.Proxyfactorybean">
<property name="target">
<ref local="someProtectedControllerTarget" />
</property>
<property name="interceptorNames">
<list>
<value>loginAdvisor</value>
<value>adminAdvisor</value>
</list>
</property>
</bean>
…能够重用我现有的方面,并使用注释将它们应用于整个控制器或控制器方法?
最佳答案
您能否使用AnnotationMatchingPointcut在控制器上查找具有@RequestMapping(或在基于注释的Spring控制器中使用的其他类似注释)的方法?