[Spring] @PreAuthorize를 사용한 접근 제한

[Spring] @PreAuthorize를 사용한 접근 제한

어노테이션 설정으로 지정된 URL에 접근 제한을 지정해봅니다.


SecurityConfig를 사용해 접근 제한을 거는 방식은 매번 URL을 추가할 때마다 설정해야 하기 때문에 번거로운 작업입니다. 스프링 시큐리티는 이런 설정을 어노테이션만으로 지정할 수 있습니다.



1. SecurityConfig - filterChain() 수정



1

먼저 @EnableGlobalMethodSecurity를 작성합니다. @EnableGlobalMethodSecurity은 어노테이션 기반의 접근 제한을 설정할 수 있도록 하게하며 시큐리티 관련 설정 클래스에 작성합니다. 속성으로 securedEnabled와 prePostEnable을 작성했는데 이는 각각 예전의 @Secure를 사용 가능한지 지정하는 것과 @PreAuthorize를 사용 가능한지 지정하는 역할을 수행합니다.
어노테이션 기반 접근 제한을 확인하기 위해 filterChain()에 작성된 requestMathers()를 동작하지 않게 합니다.

2. SecurityConfig - filterChain() 수정 결과



2

그 결과 ‘sample/admin’ 페이지에 아무 문제없이 접근할 수 있음을 확인할 수 있습니다.

3. SampleController - exAdmin() 수정



3

컨트롤러의 exAdmin()에 @PreAuthorize를 작성합니다. @PreAuthorize의 속성으로 역할을 지정합니다.

4. SampleController - exAdmin() 수정 결과



4

@PreAuthorize를 지정한 후 ‘sample/admin’에 접근한 결과 로그인을 요구하는 것을 확인할 수 있습니다.

5. SampleController - exMember(), exAll() 수정



5

exMember() 역시 member의 역할을 가진 유저만 접근할 수 있도록 수정합니다.
exAll()은 모든 유저가 접근할 수 있도록 @PreAuthorize의 파라미터로 “permitAll()”을 작성합니다.

6. SampleController - exMemberOnly() 작성



6

@PreAuthorize는 유저의 권한을 통해 접근을 제어하는 것이 아닌 특별히 지정한 유저만 접근할 수 있도록 하는 기능 또한 가지고 있습니다.
@PreAuthorize의 value 표현식은 ‘#’과 같은 특별한 기오나 authentication과 같은 내장 변수를 이용할 수 있습니다.
clubAuthMemberDTO의 username이 지정한 이메일 계정과 같을 경우에만 접근할 수 있도록 설정한 뒤 결과를 살펴보겠습니다.

7. SampleController - exMemberOnly() 결과 1



7

권한을 부여받은 아이디로 ‘sample/exOnly’에 접근할 경우 정상적으로 이동할 수 있는 것을 확인할 수 있습니다.

8. SampleController - exMemberOnly() 결과 2



8

권한을 부여받지 못한 사용자는 Acess Denied 에러 화면을 보는 것을 확인할 수 있습니다.


© 2022. All rights reserved.