Spring Security WebSecurityConfigurerAdapter을 상속받는 클래스를 통해 다양한 설정이 이루어진다.
그 중 하나로 User의 권한에 따라 접근 URI를 제한해 줄 수 있다.

이때 클래스에 @EnableGlobalMethodSecurity 어노테이션을 통해 컨트롤러의 메소드 레벨에서 접근 권한 제한을 설정해 줄 수 있다.

이와 같이 적용하면 어노테이션의 옵션에 따라 여러 방법 중 선택하여 손쉽게 접근 권한을 설정해 줄 수 있다.
@Secured
가장 간단한 방법으로 @EnableGlobalMethodSecurity(securedEnabled = true) 와 같이 securedEnabled 속성을 true로 해주면 사용할 수 있다. 사용하고자 컨트롤러 메소드에 아래와 같이 @Secured속성으로 권한을 직접 입력해준다.

@Secured({"ROLE_ADMIN","ROLE_MANAGER"}) 와 같이 or 개념으로 여러 접근 권한 또한 지정 해줄 수 있다. 하지만 이 방법은 AND 조건의 접근 제한을 적용시킬 수 없다. 이 때는 @PreAuthorize을 사용한다.
@PreAuthorize
@EnableGlobalMethodSecurity(prePostEnabled= true) 옵션을 통해 사용할 수 있다.

이와같이 특수 문법을 통해 권한을 등록하고 권한의 OR 대신 AND개념을 이용하거나 다른 몇가지 기능을 사용할 수 있다.
결론
간단한 권한 설정엔 @Secured을 쓰고, @Secured를 통해 설정해 줄 수 없는 경우에 @PreAuthorize 쓰면 될 것 같다.
참고 :
https://ggotae.tistory.com/entry/Secured-PreAuthorize-%EB%B9%84%EA%B5%90
@Secured, @PreAuthorize 비교
@Secured는 표현식 사용할 수 없고 @PreAuthroize는 표현식 사용 가능 예) @Secured({"ROLE_USER","ROLE_ADMIN"}) => OR 조건, AND 조건 불가능 @PreAuthorize("hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')")..
ggotae.tistory.com
'TIL' 카테고리의 다른 글
[TIL] 영속성 전이 CASCADE (0) | 2022.05.04 |
---|---|
[TIL] @DataJpaTest (0) | 2022.05.04 |
TDD의 장점 (0) | 2022.04.08 |
[TIL 2022-3-7] JPQL, BOJ10830 행렬 제곱 (0) | 2022.03.08 |
[TIL 2022-3-6] 평범한 배낭 (0) | 2022.03.07 |