2017-01-30 4 views
3

@PreAuthorize annotation에서 hasRole 메소드를 사용할 수 없습니다. 또한 request.isUserInRole(“ADMIN”)false입니다. 내가 뭘 놓치고 있니? .hasAuthority(“ADMIN”)이 정상적으로 작동하지만스프링 부트 보안 hasRole이 작동하지 않습니다.

데이터베이스의 사용자에게 권한을 할당하고 있습니다.

답변

7

당신은 isUserInRole를 사용하는 접두사 ROLE_와 권한의 이름을 가지고 Spring Security Reference를 참조하십시오 SecurityContextHolder.getContext().getAuthentication().getAuthorities()isUserInRole(String)에 전달 된 역할을 가진 GrantedAuthority 포함되어있는 경우

HttpServletRequest.isUserInRole (문자열)를 결정합니다. 통상, 사용자는 자동적으로이 메소드가 "ROLE_"의 접두사를 건네 주어,이 메소드에 자동적으로 건네 줄 필요가 있습니다. 현재 사용자가 권한 "ROLE_ADMIN을"이 있는지 확인하려는 경우 예를 들어, 다음 사용할 수 있습니다 (또한 hasAnyRole) hasRole에 대한

boolean isAdmin = httpServletRequest.isUserInRole("ADMIN"); 

동일을, Spring Security Reference 참조 :

현재 주체에 지정된 역할이있는 경우 true을 반환합니다. 기본적으로 제공된 역할이 'ROLE_'로 시작하지 않으면 추가됩니다. defaultRolePrefixDefaultWebSecurityExpressionHandler으로 수정하여 맞춤 설정할 수 있습니다.

+0

감사하지 않을 수 있습니다. 나는 이것에 대해 몇 시간을 낭비했다. 하지만 여전히 PreAuthorize가 내 컨트롤러에서 작동하지 않습니다. 컨트롤러 레이어에서 작동하고 서비스 레이어에서만 작동해야합니까? –

+2

이 문제는 보안 구성에서 @EnableGlobalMethodSecurity (prePostEnabled = true)를 사용하여 해결됩니다. –

관련 문제