본문 바로가기

TIL

[TIL] @Secured, @PreAuthorize 비교

Spring Security WebSecurityConfigurerAdapter을 상속받는 클래스를 통해 다양한 설정이 이루어진다.

그 중 하나로 User의 권한에 따라 접근 URI를 제한해 줄 수 있다.

@Override 된 configure(HttpSecurity) 메솟드에서 URI 패턴에 따라 접근 권한 설정

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

이와 같이 적용하면 어노테이션의 옵션에 따라 여러 방법 중 선택하여 손쉽게 접근 권한을 설정해 줄 수 있다.

 

@Secured

가장 간단한 방법으로  @EnableGlobalMethodSecurity(securedEnabled = true) 와 같이 securedEnabled 속성을 true로 해주면 사용할 수 있다. 사용하고자 컨트롤러 메소드에 아래와 같이 @Secured속성으로 권한을 직접 입력해준다.

@Secured 를 통해 "ROLE_ADMIN" 설정

 @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

https://youtu.be/uaEuT7ZfQI8

 

 

'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