如何在Spring中使用注释应用方面?

时间:2009-04-25 21:24:57

标签: java security spring annotations aspects

更新:我发现基于Spring 2.x注释的控制器对于AOP安全性来说是可怕的,因为你不能对方法原型做出假设,因为params和return的自由度增加了值。在2.x之前,您可以拦截 handleRequest 并知道第一个参数是 HttpServletRequest ,返回值是 ModelAndView 。该标准允许您为每个控制器编写简单的建议。现在映射到请求的方法可以接受任何操作并返回Strings,ModelAndViews等。

原帖:我有一组现有方面实现了在Spring中运行的AOPAlliance的MethodInterceptor。它们通过拦截控制器中的。 handleRequest。方法并允许执行或转发到登录页面来为我的webapp提供安全性。

使用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 个答案:

答案 0 :(得分:3)

您是否可以使用AnnotationMatchingPointcut在控制器上查找具有@RequestMapping(或您在基于注释的Spring控制器中使用的其他类似注释)的方法?