Как я могу применить аспект, используя аннотации в 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)?

Другие вопросы по тегам