2009-04-25 29 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控制器中使用的其他類似註釋)的方法嗎?

相關問題