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
'IT > Java' 카테고리의 다른 글
[JDBC] executeQuery()? executeUpdate()? execute()? (0) | 2024.04.19 |
---|---|
[Spring] Lombok 자동 생성자 생성 @AllArgsConstructor, @RequiredArgsConstructor (0) | 2024.04.18 |
[JDBC] Statement? PreparedStatement? (0) | 2024.04.17 |
[Java] Java에서 Wrapper Class를 사용하는 이유 (0) | 2024.04.09 |
[Java] Forward? Forwarding? (0) | 2024.04.08 |