메뉴 건너띄기
상단메뉴 바로가기
본문 바로가기

이 누리집은 대한민국 공식 전자정부 누리집입니다.

본문 영역

적용 지원, FAQ, Q&A 게시판을 통해 기술 문제 해결을 지원합니다.

묻고 답하기

권한관리
  • 작성자

    신*순

  • 작성일

    2013-12-05 19:09:24

  • 조회수

    1,108

  • 구분

    공통컴포넌트

  • 진행상태

    완료

질문

A_ROLE 권한과 B_ROLE 권한이 있습니다.

계층 구조는 아래와 같습니다.
--------------------------------------------------
PARNTS_ROLE || CHLDRN_ROLE
--------------------------------------------------
ROLE_RESTRICTED || A_ROLE
ROLE_RESTRICTED || B_ROLE
A_ROLE || ROLE_USER
B_ROLE || ROLE_USER
ROLE_USER || ROLE_ADMIN
---------------------------------------------------

A_ROLE 권한에 롤 ID 가 web-000011, web-000012 롤을 등록해주고
B_ROLE 권한에 롤 ID 가 web-000012, web-000013 롤을 등록하였습니다.

그랬더니 A_ROLE 권한의 아이디로 접속 시
계층구조는

A_ROLE
ROLE_RESTRICTED
IS_AUTHENTICATED_FULLY
IS_AUTHENTICATED_REMEMBERED
IS_AUTHENTICATED_ANONYMOUSLY
ROLE_ANONYMOUS

이렇게 가져오고 비교 값은 B_ROLE 권한으로 비교를 하더라구요...

제가 궁금한 것은 RoleVoter.class 파일의 vote() 메소드의 iter.hasNext() 값을
롤 권한이 있는 모든 롤을 담고 싶습니다...

어디서 확인하면 될까요?? 확인 부탁 드립니다....

답변

안녕하세요. 신인순님.

A_ROLE을 가지고 계신 사용자로 로그인 하셨기 때문에 정상적으로 A_ROLE 및 계층 상 상위 롤에 대한 authorities를 갖는 것은 정상입니다.

비교 값은 B_ROLE 권한으로 비교된다라는 의미가 어떤 의미이신지요?

혹, 중복되고 있는 web-000012 패턴에 대하여 B_ROLE을 먼저 비교한다라는 의미이신가요?

이 경우라면 패턴 (web-*) 등록 시에 서로간의 order가 있습니다. (ROLE_SORT 컬럼)
이 값을 통해 어떤 패턴을 먼저 적용할지 결정이 됩니다.

추가적으로 여러 개의 하나만 해당이 되더라도 권한을 획득하는 방식(AffirmativeBased access decision manager)으로 동작하기 때문에 문제가 되진 않으실 것 같습니다.

또한 기본적으로 RoleVoter 상에 rolePrefix 가 "ROLE_"로 등록되기 때문에 롤을 추가하실 때에는 "ROLE_"으로 시작하시는 것이 좋으실 것 같습니다.

마지막으로 Spring Security 자체에 대한 수정은 권장해드리지 않습니다. (해당 부분에 대한 변경 시 표준화의 실효성 상실)
이 때문에 지원해드릴 수 없습니다.

그럼, 즐거운 하루되십시오.
감사합니다.

이 페이지의 구성

묻고 답하기