Как я могу применить аспект, используя аннотации в Spring?
Обновление: я обнаружил, что основанные на аннотациях Spring 2.x контроллеры ужасны для безопасности AOP, потому что вы не можете делать предположения о прототипе метода из-за увеличенной свободы в параметрах и возвращаемых значениях. До версии 2.x вы могли перехватывать handleRequest и знать, что первым параметром был HttpServletRequest, а возвращаемым значением был ModelAndView. Этот стандарт позволял вам писать простые советы для каждого контроллера. Теперь методы, сопоставленные с запросами, могут принимать что угодно и возвращать Strings, ModelAndViews и т. Д.
Исходное сообщение: у меня есть ряд существующих аспектов, которые реализуют метод MethodInterceptor AOPAlliance, работающий в Spring. Они обеспечивают безопасность моего веб-приложения, перехватывая. 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>
... чтобы можно было повторно использовать мои существующие аспекты и применять их ко всем контроллерам или методам контроллера с использованием аннотаций?
1 ответ
Не могли бы вы использовать AnnotationMatchingPointcut для поиска методов на ваших контроллерах, которые имеют @RequestMapping (или другие подобные аннотации, которые вы используете в своих основанных на аннотациях контроллерах Spring)?