2012-11-22 4 views
3

일부 공유 @RequestMapping 메소드가있는 추상 클래스 (상위 클래스)가 있으며 하위 클래스를 구현하는 클래스는 @Controller입니다.클래스의 보안 주석이 상위 클래스 메소드에 적용되지 않습니다.

클래스 수준에서 @Secured이라는 하위 클래스에 주석을 달았지만 부모 클래스 메서드는이를 통해 보호되지 않습니다. (즉, AOP 인터셉터는 상위 클래스가 아닌 하위 클래스의 메서드 만 고려합니다.

불행히도 하위 클래스는 각각 다른 역할로 보호되어야하므로 공통적 인 @Secured 제한으로 부모 클래스에 주석을다는 것은 불가능합니다. 부모 클래스의 모든 메서드를 재정의하여 보호되므로이 추악한 해결 방법을 피하고자합니다.

따라서 내가 (클래스 계층의 모든 메소드가 대상 클래스의 @Secured 주석을 관찰 할 수 있도록 인터셉터, 조언 또는 메타 데이터 공급자를 재정의 할 수있는 것이 궁금합니다.)

추가 정보 :

(내 경우, 부모 클래스에서) 주석 해상도가 org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource.getAttributes(Method, Class<?>)에서 구현되고 실제로 그것은 단지 메소드의 선언 클래스 보았다 보인다. 그러나 프록시 프로그래밍에 익숙하지 않아 원하는 변경 사항을 안전하게 구현하는 방법에 대한 조언을 언제든지 환영합니다.

답변

1

당신이 단순히

@Override 
public Collection<ConfigAttribute> getAttributes(Method method, Class<?> targetClass) { 
    Collection<ConfigAttribute> out = super.getAttributes(method, targetClass); 

    if (out == null || out.isEmpty()) { 
     out = findAttributes(targetClass); 
     if (out == null) out = Collections.emptyList(); 
    } 

    return out; 
} 
처럼 뭔가 SecuredAnnotationSecurityMetadataSource을 무시할 수 있습니다 보인다
관련 문제