@PreAuthorize 애너테이션은 무엇인가?
메서드 호출전에 특정한 조건을 체크하여 접근을 허용하거나 거부하는 기능이다.
Spring Expression Language 기능을 사용하여 복잡한 권한 조건도 간단하게 표현을 가능하게 해 준다.
SpEL는 아래의 링크로 확인 가능하다.
출처: https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html
PreAuthorize의 제일 중요한 특징은 다음과 같다
- 메서드 수준에서의 권한제어를 할 수 있다
- 컨트롤러 서비스 등 계층 어디에서나 사용이 가능하다
- 비즈니스 로직과 보안 로직을 분리 가능하기 때문에 보안과 가독성을 높일 수 있다.
사용 방법은 다음과 같다.
일단 Spring Security를 구현하여 user에 대한 권한이 있는 환경을 구성
다음으로 권한을 부여할 메서드가 있다면 아래와 같이 구성 후에
@RestController
@RequestMapping("/api/v1")
@Tag(name = "테스트 관련 API")
public class testController {
@PreAuthorize("hasRole('MASTER')")
@GetMapping("/test")
public ResponseEntity<?> testPreAuthorize(
@AuthenticationPrincipal UserDetailsImpl userDetails
){
return ResponseEntity.ok("마스터 권한 통과" + userDetails.getUser().getUsername());
}
}
마스터 계성을 생성하고 테스트를 진행해 보면 간단하게 통과하는 것을 확인할 수 있다.
그럼 다른 CUSTOMER 계정으로 테스트를 진행하면?
위와 같은 결과로 권한이 없어 거부당한다.
여기서 확인할 수 있는 단점은 어디서 에러가 터졌는지 정확한 확인이 어렵다는 것이다.
단위 테스트로 보면 확인이 가능하나 통합테스트 기준으로 본다면 확인하기 어려울 것이다.
'심화 캠프 정리' 카테고리의 다른 글
ModelAttribute (0) | 2024.11.20 |
---|---|
PageableArgumentResolver (0) | 2024.11.20 |
동적쿼리 BooleanExpression (0) | 2024.11.20 |
동적쿼리 OrderSpecifier (0) | 2024.11.20 |
생성자 수정자 자동으로 생성하기 (0) | 2024.11.19 |