2009-04-25 13 views
3

Update: Ich habe festgestellt, die Spring 2.x Annotation-basierte Controller sind schrecklich für AOP Sicherheit, weil Sie keine Annahmen über die Methode Prototyp aufgrund der erhöhten Freiheit in Params und Rückgabewerte machen können. Vor 2.x konnten Sie handleRequest abfangen und wissen, der erste Parameter war ein HttpServletRequest und der Rückgabewert war ein ModelAndView. Mit diesem Standard können Sie einfache Ratschläge für jeden Controller erstellen. Nun Methoden auf Anfragen abgebildet können alles nehmen und zurück Streicher, ModelAndViews usw.Wie kann ich einen Aspekt mithilfe von Anmerkungen im Frühling anwenden?

Original-Beitrag: Ich habe eine Reihe von bestehenden Aspekten, die AOPAlliance des MethodInterceptor läuft im Frühjahr umzusetzen. Sie bieten Sicherheit für meine Webapp durch Abfangen. handleAnfrage. Methoden in den Controllern und erlauben entweder Ausführung oder Weiterleitung an eine Anmeldeseite.

Mit den neuen annotierungsbasierten Controllern in Spring muss die Methode "handleRequest" nicht mehr implementiert werden. Die Methoden des Controllers können beliebig benannt werden. Dies bricht mein bestehendes Sicherheitsmodell. Also, wie komme ich von dieser:

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

... zu der Möglichkeit, meine bestehenden Aspekte wieder zu verwenden und sie auf gesamtem Controller oder Controller-Methoden mit Anmerkungen?

Antwort

3

Können Sie eine AnnotationMatchingPointcut verwenden, um nach Methoden auf Ihren Controllern zu suchen, die das @RequestMapping (oder andere ähnliche Anmerkungen, die Sie in Ihren Annotation-basierten Spring-Controllern verwenden) haben?

Verwandte Themen