2016-12-14 1 views
1

현재 스프링 부트 1.4.2.RELEASE 및 스프링 보안 4.1.3.RELEASE로 응용 프로그램을 개발 중입니다. 응용 프로그램에는 Rest Controllers가 있으며 json 메시지를 수신하고 이에 응답합니다. 이 응용 프로그램은 Angular 응용 프로그램과 통신합니다. 같은 RestControllers 방법에스프링 보안 필터 체인을 사용하여 응용 프로그램 내부에서 사용자 인증 확인 프로그래밍 방식으로

http.authorizeRequests() 
    .antMatchers(HttpMethod.POST, "/foo/bar/**") 
     .access("(hasRole('OPERATOR') && hasRole('MAKER')) || hasRole('ADMIN')") 
    .anyRequest().authenticated() 
    .and() 
    .httpBasic(); 

그리고 규칙 :

@PreAuthorize("hasRole(#id) || hasRole('ADMIN')") 

모든 것을 지금은 봄 Hateoas을 추가 해요, 문제없이 작동하고 은 이미 인증 및 권한 부여가 같은 구성 작업이 있습니다. Hateoas는 리소스에 대한 사용자 권한 부여와 관련이 없지만 각도 앱에 추가 정보를 보낼 수 있기를 바랍니다. 리소스의 링크뿐만 아니라 사용자가 액세스 할 수있는 동작 (http 동사)

응용 프로그램의 보안을 향상시키기 위해이 작업을 수행하고 싶지는 않지만 단지 사용자 환경을 개선하는 것입니다. Angular 앱에서는 서버가 전송하는 기능에 따라 기능을 활성화 또는 비활성화 할 수 있기를 원합니다.

스프링 보안에 사용할 수있는 클래스가 있습니까? URL을 테스트하고 해당 URL에 특정 작업을 실행할 권한이 있는지 확인하기 위해 Autowire를 사용할 수 있습니까?

지금까지 테스트 한 Spring Security 문서에 언급 된 모든 클래스는 @Autowire 주석에 의해 인식되지 않습니다.

+0

잘 이해했다면, 당신은'SecurityContextHolder.getContext(). getAuthentication()'을 찾고 있지 않습니까? – Artegon

+0

@ user1315357 나는이 방법을 알고 있으며 사용자 프로필을 얻습니다. 그러나 사용자가 POST http://example.com/foo/bar와 같이 실행할 수 있는지 여부를 확인하려면 질문에 설명 된 antMatcher에서 선언 한 규칙을 사용하지 않는 논리를 성문화해야합니다. –

답변

1

흥미로운 질문이 있으시면 WebInvocationPrivilegeEvaluator을 참조하십시오.

isAllowed(String contextPath, String uri, String method, Authentication authentication) 

당신은 예를 here에 대한 행동에서 볼 수 있습니다.

+0

어떤 이유로 WebInvocationPrivilegeEvaluator가 @PreAuthorize로 선언 된 규칙을 사용하지 않습니다. 어쩌면 버그 일 수도 있습니다. 확실하지 않습니다. 문제를 재현 할 샘플 프로젝트를 만들고 버그라고 생각하면 GitHub에 게시 할 것입니다. –

+0

프로토 타입을 공유하십시오. – Artegon

+1

github : [link] (https://github.com/spring-projects/spring-security/issues/4159)에서 문제가 발생했습니다. 이슈에 대한 설명에서 문제를 보여주는 샘플 프로젝트에 대한 링크를 찾을 수 있습니다. –