2009-04-25 58 views
3

更新:我发现基于Spring 2.x注释的控制器对于AOP安全性来说太可怕了,因为由于params和返回值的自由度增加,您无法对方法原型做出假设。在2.x之前,您可以拦截handleRequest并知道第一个参数是HttpServletRequest并且返回值是ModelAndView。这个标准允许你为每个控制器编写简单的建议。现在映射到请求的方法可以采取任何东西,返回字符串,ModelAndViews等如何在Spring中应用使用注释的方面?

原贴:我有一组其实现AOPAlliance的MethodInterceptor的春季运行现有的方面。他们通过拦截为我的web应用程序提供安全性。 handleRequest。控制器中的方法,并允许执行或转发到登录页面。

随着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> 

...要能重用现有的方面,并将其应用到使用注释整个控制器或控制器的方法呢?

回答

3

您可以使用AnnotationMatchingPointcut在您的控制器上查找具有@RequestMapping(或您在基于注释的Spring控制器中使用的其他类似注释)的方法吗?

相关问题