최근 보안 설정과 관련된 처리를 하면서 @PreAuthorize를 사용하며 Spring Security에서 제공하는 @Secured, @PreAuthorize, @PostAuthorize라는 세 보안 어노테이션에 대해 찾아보게 되었고, 그 김에 정리해서 올려본다.
@Secured
@Secured는 특정 Role을 가진 사용자만 메서드에 접근할 수 있도록 제어한다.
@Secured("ROLE_ADMIN")
public void adminOnlyMethod() {
// 관리자만 실행 가능
}
- 특징
- 단순 Role 기반으로 접근 제어
- SpEL 표현식 불가
- secured-enabled="true" 설정 필요
@PreAuthorize
@PreAuthorize는 메서드 실행 전에 권한과 조건을 평가한다. SpEL(Spring Expression Language) 지원으로 복잡한 조건도 지정 가능하다.
@PreAuthorize("hasRole('ADMIN') or #user.username == authentication.name")
public User getUser(User user) {
return user;
}
- 특징
- 메서드가 실행 되기 전에 권한 및 조건 체크
- SpEL 표현식 지원
- pre-post-enabled="true" 설정 필요
@PostAuthorize
@PostAuthorize는 메서드 실행 후, 반환값을 기준으로 조건을 평가한다.
예를 들어, 데이터 반환 후 returnObject.owner == authentication.name 같은 조건으로 접근 제어 가능.
@PostAuthorize("returnObject.owner == authentication.name")
public Document getDocument(int id) {
return documentService.findById(id);
}
- 특징
- 메서드 실행 후 리턴값을 기준으로 조건 체크
- 예를 들어 특정 사용자가 본인 소유의 데이터만 볼 수 있게 하려면, 사용자가 누구인지에 대한 ‘식별’ 과정도 필요한 상황.
- SpEL 표현식 지원
- pre-post-enabled="true" 설정 필요
- 메서드 실행 후 리턴값을 기준으로 조건 체크
결론적으로,
- @Secured는 SpEL을 지원하지 않기 때문에, 단순 Role 기반의 권한 체크에만 적합하다.
- java config 사용중이라면
- SecurityConfig.java 파일에서 해당 클래스에 @EnableMethodSecurity 어노테이션 추가
- xml config 사용중이라면
- @PreAuthorize, @PostAuthorize는 pre-post-enabled="true" 설정이 필요하고, @Secured는 secured-enabled="true" 설정 필요함.
'Today I Learned > Spring' 카테고리의 다른 글
[Spring] redirect 시, URL에 파라미터 붙는 이유 (0) | 2025.06.28 |
---|---|
[Spring] React 라우팅을 위한 SPA 서버 세팅 (0) | 2025.04.20 |
[Spring] RestTemplate (0) | 2025.04.09 |
[Spring] getSession(), getSession(true), getSession(false) (0) | 2023.03.06 |
[Spring] 어디에서나 Spring 컨테이너 Bean 객체 가져오기 (1) | 2023.02.14 |