인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

레오나님의 프로필 이미지
레오나

작성한 질문수

스프링 시큐리티

4) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (1)

RolVoter관련하여 질문이 있습니다.

해결된 질문

작성

·

217

1

강사님 안녕하세요.

강의를 듣다가 17:40 즈음에 getAccessDecisionVoters를 Arrays.asList(new RoleVoter());로 하셨는데

RoleVoter는 WebExpressionVoter와 같이 AccessDecisionVoter의 구현제 종류 중 하나인가요?

만약 그렇다면 getAccessDecisionVoters에 RoleVoter가 아닌 WebExpressionVoter를 넣어도 되는건가요? WebExpressionVoter가 아닌 RoleVoter를 사용하신 이유가 따로 있나요?

RoleVoter만 return으로 하신 이유는 뒤에 나오는 Hierarchy나 IpAddress와 같은 추가적인 Voter를 아직 추가하지 않았기 때문인가요? 실제 프로젝트에서도 추가적인 Voter를 사용하지 않는다면 저런식으로만 구현해도 괜찮을까요?

항상 친절한 답변 감사합니다 !

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

네 

Voter 클래스의 구현체 중 WebExpressionVoter 는 표현식으로 된 문장을 파싱해서 인가처리를 하는 Voter 클래스입니다.

흔히 설정 클래스에서 antMatcher("/member").hasRole("ADMIN") 이라고 했다면 /member 자원에 접근하는 사용자의 권한이 ADMIN 인지 아닌지 판별하기 위해 hasRole("ADMIN") 과 같은 표현식의 값을 파싱하는 용도로 사용합니다.

그런데 RoleVoter 는 표현식이 아닌 SecurityConfig("ROLE_ADMIN") 와 같은 값을 가지고 인가처리를 하는 클래스입니다.

강의 예제에서는 DB로부터 권한 데이터를 가지고 와서 매핑한 다음 사용을 하고 있습니다.

Voter 마다 인가처리를 하는 방식이 다르기 때문에 정책에 따라서 직접 구현하거나 기본적으로 제공되는 Voter 클래스들을 활용하시면 됩니다.

말씀하신대로 Hierarchy나 IpAddress 같은 인가 처리를 별도로 하기 위해서는 리스트에 추가적으로 담아서 리턴하게 되면 스프링 시큐리티가 순서대로 인가처리를 하게 됩니다.

레오나님의 프로필 이미지
레오나

작성한 질문수

질문하기