2009-04-25 7 views
3

업데이트 : 스프링 2.x 주석 기반 컨트롤러는 매개 변수와 반환 값의 자유도가 높아서 프로토 타입에 대한 가정을 할 수 없기 때문에 AOP 보안에 끔찍한 것을 발견했습니다. 2.x 이전에는 을 가로 채고 첫 번째 매개 변수는 HttpServletRequest이고 반환 값은 ModelAndView입니다. 이 표준을 사용하면 모든 컨트롤러에 대해 간단한 조언을 작성할 수 있습니다. 지금 요청에 매핑 방법이 무엇이든을 등 문자열, ModelAndViews를 반환 할 수 있습니다Spring의 주석을 사용하여 aspect를 어떻게 적용 할 수 있습니까?

원래의 게시물 : 나는 봄에서 실행 AOPAlliance의의 MethodInterceptor를 구현하는 기존의 측면의 집합을 가지고있다. 인터셉트를 통해 내 webapp에 보안을 제공합니다. 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> 

을 ... 기존 측면을 재사용하고 주석을 사용하여 전체 컨트롤러 또는 컨트롤러 방법에 적용 할 수있는에?

답변

3

컨트롤러에서 @RequestMapping (또는 주석 기반 Spring 컨트롤러에서 사용하는 다른 유사한 주석)을 가진 메소드를 찾으려면 AnnotationMatchingPointcut을 사용할 수 있습니까?

관련 문제