보통, User의 Role을 이용할 경우, enum을 통해서 ADMIN, USER 처럼 정의하고 이용하게 된다. DB에도 이렇게 저장된다.
그러나 권한 확인 메소드인 hasRole 같은 경우에는 자동으로 앞에 "ROLE_" 문자열을 붙여서 비교하게 된다.
사용자 인증 할때 보통 Custom 한 UserDetails 를 구현한 구현체 구성을 하게 되는데, 오버라이드 한 메소드 중 아래 메소드에서
"ROLE_" 문자열을 붙여줘야 한다.
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
if(userDto == null)
return List.of();
return List.of(new SimpleGrantedAuthority("ROLE_" + userDto.getRole()));
}
이제 이 경우, 어느 Role 에서는 ROLE_가 붙고, 어디서는 enum값 그대로 쓸 수 있는지 헷갈리게 된다.
간략히 요약하자면,
- SecurityContext에 저장된 항목 : ROLE_ 가 붙어 있음
- 그외 개발자가 개발한 API, 엔티티 등 항목 : ROLE_가 붙어있지 않음
다시 요약하자면,
- DB, 엔티티에는 Enum에서 명시한 Role 이름 그대로.
- UserDetails를 구현한 구현체에서 ROLE_ 문자열 붙이기
- 이후 SecurityContext 에 저장된 Role을 가져올 경우에는 ROLE_이 붙어있음 (GrantedAuthority 관련된 항목들)
- 단, SecurityContext에 Dto를 저장했다면, 해당 Dto에 있는 role 은 enum 그대로
- Authentication의 getPrincipal 메소드는 ROLE_
- hasRole() 메서드를 이용하는 경우에는 자동으로 ROLE_가 붙음
'Backend > SpringBoot' 카테고리의 다른 글
| SSE 예제 (0) | 2026.01.14 |
|---|---|
| 순수 WebSocket (+Protobuf) (0) | 2026.01.14 |
| Outbox 패턴 모니터링 설정 (Prometheus+Grafana 를 위한) (1) | 2026.01.12 |
| Kafka-Outbox 전략 구현 예 (0) | 2026.01.12 |
| Kafka (+Kafka UI) 설정 및 연동 (오류 핸들링 포함) (0) | 2026.01.12 |