Spring Security
@PreAuthorize("hasAuthority('SUPER_ADMIN')") 정리
Spring Security로 관리자 기능을 만들다 보면, 특정 API는 슈퍼 관리자만 접근 가능하게 막아야 할 때가 있습니다. 이때 자주 사용하는 방식이 바로 아래 코드입니다.
@PreAuthorize("hasAuthority('SUPER_ADMIN')")
1. @PreAuthorize?
@PreAuthorize는 메서드 실행 전에 인가(Authorization) 검사를 수행하는 어노테이션입니다.
즉, 조건을 만족하는 사용자만 메서드가 실행되고, 조건을 만족하지 못하면 실행 전에 막힙니다. Spring Security의 Method Security 기능을 활성화하면 사용할 수 있습니다.
쉽게 말하면:
인증(Authentication): “로그인 했는가?”
인가(Authorization): “이 기능을 사용할 권한이 있는가?”
@PreAuthorize는 이 중에서 인가를 담당합니다.
2. hasAuthority('SUPER_ADMIN')의 의미
@PreAuthorize("hasAuthority('SUPER_ADMIN')")
이 표현식은 현재 로그인한 사용자의 Authentication 안에 들어있는 GrantedAuthority 목록 중에
"SUPER_ADMIN" 이라는 권한 문자열이 있는지 검사합니다.
Spring Security에서 권한 정보는 GrantedAuthority 리스트로 관리되고, 이 값은 문자열로 비교됩니다.
즉, 로그인한 관리자에게 이런 권한이 들어 있어야 통과합니다:
SUPER_ADMIN
없으면 AccessDeniedException이 발생하고 보통 HTTP 403 Forbidden 응답으로 이어집니다. (전역 예외 처리/시큐리티 설정에 따라 응답 형태는 다를 수 있음)