1

URL 및 메소드를 보호하는 스프링 부트 (1.5.3) oauth2 응용 프로그램이 있습니다. @PreAuthorize ("hasRole ('ROLE_NAME')")스프링 부트 보안 OAuth2 + 사용자 정의 권한 평가 도구

내가 지금은 "( @PreAuthorize와 hasPermission을 방법을 확보 할 수 있도록 사용자 정의 PermissionEvaluator를 추가하기 위해 노력하고있어 (#ID : 방법 보안은 현재를 통해 노력하고 있습니다 , 'typeName', 'permissionName') ").

나는 확장 GlobalMethodSecurityConfiguration하여이 기능을 가능 해요 :

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true, mode = 
AdviceMode.ASPECTJ, jsr250Enabled = true) 
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration 
{ 

    @Autowired 
    private MatterRepository matterRepository; 
    @Autowired 
    private MatterTeamMemberRepository matterTeamMemberRepository; 

    @Override 
    protected MethodSecurityExpressionHandler createExpressionHandler() { 
     Map<String, Permission> permissionsMap = new HashMap<>(); 
     permissionsMap.put(ReadMatterPermission.class.getSimpleName(), 
     new ReadMatterPermission(matterRepository, matterTeamMemberRepository)); 

     OAuth2MethodSecurityExpressionHandler handler = new 
     OAuth2MethodSecurityExpressionHandler(); 
     handler.setPermissionEvaluator(new 
      EntityPermissionEvaluator(permissionsMap)); 
     return handler; 
    } 

}

참고 : PermissionEvaluator 클래스는 간결함을 위해 생략.

내가 가지고있는 문제는 hasPermission이 종종 호출된다는 것입니다. 대부분의 경우 호출되지 않습니다.

*Auto-configure an expression handler for method-level security (if the user 
* already has 
* {@code @EnableGlobalMethodSecurity}). 
o.s.b.autoconfigure.security.oauth2.method.OAuth2MethodSecurityConfiguration 

내 구성이 처리되기 전에 OAuth2MethodSecurityExpressionHandler의 인스턴스를 생성 :이 함께 할 수있는 뭔가 의심.

스프링 부트 oauth2 응용 프로그램에 PermissionEvaluator를 성공적으로 주입 한 사람이 있습니까?

감사합니다.

+0

필자는 아무런 차이가 없으므로이를 제거한 oauth2 자동 구성을 비활성화했습니다. – Chappers1975

답변

0

봄 보안 구성 문제가 아니라는 것을 알게되었습니다. 이 문제는 pom의 aspectj 컴파일러 구성과 관련이 있습니다. 길고도 짧은 이야기, AnnotationSecurityAspect의 정규화 된 클래스 이름이 잘못되었습니다 :

org.springframework.security.access.intercept.aspectj.AnnotationSecurityAspect 

대신 무시하는 주석을 @PreAuthorize 원인

org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect 

의. @PreAuthorize ("hasRole ...")가 작동하고 있다는 것을 이해하는 것은 잘못되었습니다. Eclipse를 실행할 때 테스트가 성공할 수도 있지만 명령 행에서 mvn을 통해 실행되지 않는 경우가 있습니다.