IT/Java

[Spring Security] 권한 부여 Annotation

Huitopia 2024. 5. 17. 17:49
728x90

Spring Security 권한 부여 Annotation 종류

1. @PreAuthorize

// 현재 사용자가 'ROLE_ADMIN' 역할을 가지고 있는지 확인
@PreAuthorize("hasRole('ROLE_ADMIN')")

메소드 호출 전에 보안 검사를 수행할 때 사용

메소드가 실행되기 전 지정된 SpEL(Spring Expression Language)을 사용하여 권한 평가

 

2. @Secured

// 현재 사용자가 'ROLE_ADMIN' 역할을 가지고 있는지 확인
@Secured("ROLE_ADMIN")

메소드에 대한 보안 설정을 지원

메소드에 특정 역할 부여 가능

@EnableGlobalMethodSecurity(securedEnabled = true)

💡 @Secured 사용시 반드시 메소드 보안 활성화 시키는 설정 추가

 

3. @PostAuthorize

// 메소드의 반환 객체의 사용자 이름이 현재 사용자의 이름과 일치하는지 확인
@PostAuthorize("returnObject.username == authentication.name")

메소드 실행 후에 보안 검사를 수행하는 데 사용

메소드 실행 후에 지정된 SpEL을 사용하여 권한 평가

💡 실행 후 반환되는 값을 기반으로 보안 검사 수행

 

4. @PreFilter

// 'ROLE_ADMIN' 역할을 가진 사용자 또는 삭제할 아이템의 소유자가 현재 사용자와 일치하는 경우에 메소드 실행
@PreFilter("hasRole('ROLE_ADMIN') or filterObject.owner == authentication.name")

메소드 파라미터의 컬렉션을 필러팅하는 데 사용

➡️ 메소드의 매개변수로 전달되는 컬렉션을 보안 검사를 위해 필터링 가능

메소드가 호출되기 전에 지정된 SpEL을 사용하여 각 요소의 권한 평가

 

 

5. @PostFilter

// 'ROLE_ADMIN' 역할을 가진 사용자 또는 반환된 아이템의 소유자가 
// 현재 사용자와 일치하는 경우에만 반환된 아이템을 유지
@PostFilter("hasRole('ROLE_ADMIN') or filterObject.owner == authentication.name")
public List<Item> getItems(){
	...
}

메소드의 반환 값을 필터링하는 데 사용

메소드 실행 후에 지정된 SpEL을 사용하여 각 요소의 권한 평가

 

6. @PreAuthorize @PostAuthorize

// 메서드 호출 전에 'ROLE_ADMIN' 역할을 가진 사용자만이 메서드를 호출
@PreAuthorize("hasRole('ROLE_ADMIN')")
// 메서드 실행 후에 반환된 아이템의 소유자가 현재 사용자와 일치하는지를 확인
@PostAuthorize("returnObject.owner == authentication.name")
public Item getItemById(long id) {
    ...
}

이 두 어노테이션을 조합하여 메소드 호출 전후에 보안 검사 수행 가능

메소드의 입력과 반환 값 모두에 대한 보안 검사 수행

 

 

728x90