2009-04-25 10 views
3

更新:私は、Spring 2.xアノテーションベースのコントローラが、AOPセキュリティにとって恐ろしいことを発見しました。これは、パラメータと戻り値の自由度が増したためにメソッドのプロトタイプについて仮定することができないためです。 2.xの前にhandleRequestを傍受し、最初のパラメータがで、HttpServletRequestがであり、戻り値がModelAndViewであったことがわかります。この規格では、すべてのコントローラに対して簡単なアドバイスを書くことができました。今すぐリクエストにマッピングされた方法は何かを取り、文字列を返すことができ、ModelAndViewsなどSpringのアノテーションを使用してアスペクトを適用するにはどうすればよいですか?

オリジナルポスト:私は春に実行されているAOPAllianceのMethodInterceptorの実装を既存の面のセットを持っています。私はWebappのセキュリティを傍受して提供します。 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

コントローラの@RequestMapping(またはアノテーションベースのSpringコントローラで使用する他の類似したアノテーション)を持つメソッドを探すためにAnnotationMatchingPointcutを使用できますか?

関連する問題