2009-04-25 5 views
3

Обновление: Я нашел, что контроллеры Spring 2.x, основанные на аннотациях, ужасны для безопасности AOP, потому что вы не можете делать предположения о прототипе метода из-за повышенной свободы в параметрах и возвращаемых значениях. До 2.x вы можете перехватить handleRequest и знать, что первый параметр был HttpServletRequest, а возвращаемое значение было ModelAndView. Этот стандарт позволил вам написать простые советы для каждого контроллера. Теперь методы отображенные на запросы могут взять что-нибудь и возвращать строки, ModelAndViews и т.д.Как применить аспект с помощью аннотаций весной?

Оригинал Сообщение: У меня есть набор существующих аспектов, которые реализуют MethodInterceptor AOPAlliance бежит весной. Они обеспечивают безопасность моего webapp путем перехвата. ручкаRequest. в контроллерах и разрешает выполнение или пересылку на страницу входа.

С помощью новых контроллеров на основе аннотаций весной метод «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 на основе аннотаций)?

Смежные вопросы