본문 바로가기
Spring/Spring Security

[Spring Security] 2. 권한설정

1편에서 Spring Security의 기본적인 설정 방법에 대하여 알아보았지만 말 그대로 기본적인 설정일뿐 현실적으로 사용하기에는 무리가 있다. 사실상 스프링시큐리티는 커스터마이징을 하지 않는다면 아무 의미가 없기 때문에 기본설정 이후에 각 기능에 대하여 적절한 튜닝절차를 거쳐야 하는데 스프링시큐리티 2번째 포스팅에서는 권한설정에 대하여 좀 더 자사하게 알아 볼려고 한다.

 

 

 

 

 

권한설정

<http auto-config="true" use-expressions="true">
  <intercept-url pattern="/member/**" access="hasAnyRole('ROLE_USER','ROLE_GUEST')"/>
  <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
  <intercept-url pattern="/**" access="permitAll"/>
</http>

기본설정 편에서는 url에 따른 접근권한을 한개만 설정했지만 이번에는 3가지로 나누어서 설정을 했다.
특이한점은 use-expressions 옵션의 값이 기본설정편에서 false였는데 true로 변경됬다는 점인데
이 값이 true가 된다면 SpEL문법을 사용한다는 의미이다.
예를 들어hasAnyRole이라던가 permitAll과 같은 단어가 SpEL문법을 사용한 예시이다.
SpEL문법은 해당섹션 제일 하단에 기술해 두었으니 필요하다면 참고해서 사용하면 된다.

추가적으로 url별 접근권한을 설정할 때 주의할 점이 있는데 그건 바로 순서이다.
위에서부터 설정이 되기 때문에 위의 코드 기준으로 가장 아래에 위치한 permitAll(전체접근 가능)설정을 가장 위로 올릴 경우
밑에서 admin접근이든 뭐든 설정한게 모두 무효화 되는 참사가 발생된다.

 

 

 

 

 

#SpEL문법

hasRole("admin") - admin권한을 가지고 있어야 접근가능
hasAnyRole("admin", "user") - admin, user권한중 한가지만 가지고 있으면 접근가능

permitAll - 모두 접근가능

denyAll - 모두 접근불가능

isAnonymous() - 인증을 하지 않은 사용자일 경우(로그인하지 않은 사용자)

isRememberMe() - Remember-me 기능으로 로그인한 사용자일 경우(자동로그인 사용자)

isAuthenticated() - 인증을 한 사용자일 경우(로그인한 사용자)

isFullyAuthenticated() - 인증을 한 사용자이면서 Remember-me 기능으로 로그인하지 않은 사용자

댓글