[Spring Security] Voter - 권한처리

spring_security

권한 처리 #

각각의 기능은 각 클래스의 decide() 메소드를 보면 확인 가능하다.

Voter 기반의 AccessDecisionManager 를 이해하려면 각 voter 들이 어떻게 동작하는지 알고 있는 것이 좋다.

권한 심사에 참여하는 Voter 들 #

v1


@Secured 어노테이션 기반 Voter #

RoleVoter #

AuthenticatedVoter #

인증(통행증)을 받았다면 그 인증의 종류가 어떤 종류인지를 판단한다. 이제 막 인증을 받고 들어온 사용자와 RememberMe 토큰을 통해서 들어온 사용자와 익명 사용자를 구분하기 위해 쓰인다. RememberMe 인증 사용자는 탈취된 토큰을 가지고 들어온 사용자일 수 있기 때문에 필요한 경우 한번 더 인증을 요구할 수 있다.


SpEL 을 사용하는 Voter #

하지만 RoleVoter 은 SpEL 을 사용하는 WebExpressionVoter 나 PIAAVoter (PreInvocationAuthorizationAdviceVoter) 가 사용성을 대체하고 있다.

v2

SpEL #

spel


SecurityExpressionRoot #

seroot


PermissionEvaluator #

이제까지의 권한 심사는 authentication 통행증을 검사하는 것이였다. 그런데 심사를 하려면 통행증만 검사하면 안되고, 가져가려는 물건이 무엇인지를 같이 봐야하는 경우가 많다.

예를 들어 기말고사 중에

이런 경우라면 어떤 시험지인지, 그리고 시험지에 대한 열람 권한이 누구에게 있는지 등의 여러가지 데이터들이 모여야 해당 권한을 판단할 수 있다. 이런 경우에는 PermissionEvaluator 를 사용하거나 객체별로 접근 권한을 DB 로 관리해주는 ACL 처럼 권한을 체크하기 위한 별도의 설계가 들어가야 한다.


WebExpressionVoter와 PIIAVoter (@PreAuthorize 어노테이션 기반) #

WebExpressionVoter와 PIIAVoter 는 모두 아래와 같은 방식으로 SpEL 을 사용한다.

seroot2


출처 #