@PreAuthorize
annotation에서 hasRole
메소드를 사용할 수 없습니다. 또한 request.isUserInRole(“ADMIN”)
은 false
입니다. 내가 뭘 놓치고 있니? .hasAuthority(“ADMIN”)
이 정상적으로 작동하지만스프링 부트 보안 hasRole이 작동하지 않습니다.
데이터베이스의 사용자에게 권한을 할당하고 있습니다.
@PreAuthorize
annotation에서 hasRole
메소드를 사용할 수 없습니다. 또한 request.isUserInRole(“ADMIN”)
은 false
입니다. 내가 뭘 놓치고 있니? .hasAuthority(“ADMIN”)
이 정상적으로 작동하지만스프링 부트 보안 hasRole이 작동하지 않습니다.
데이터베이스의 사용자에게 권한을 할당하고 있습니다.
당신은 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_'로 시작하지 않으면 추가됩니다.defaultRolePrefix
을DefaultWebSecurityExpressionHandler
으로 수정하여 맞춤 설정할 수 있습니다.
감사하지 않을 수 있습니다. 나는 이것에 대해 몇 시간을 낭비했다. 하지만 여전히 PreAuthorize가 내 컨트롤러에서 작동하지 않습니다. 컨트롤러 레이어에서 작동하고 서비스 레이어에서만 작동해야합니까? –
이 문제는 보안 구성에서 @EnableGlobalMethodSecurity (prePostEnabled = true)를 사용하여 해결됩니다. –