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

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

본문 영역

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

묻고 답하기

EgovUserDetailsHelper.getAuthorities() 활용 관련 문의
  • 작성자

    이*한

  • 작성일

    2013-10-18 17:23:18

  • 조회수

    1,523

  • 구분

    실행환경

  • 진행상태

    완료

질문

안녕하세요~
spring_security 관련되어서 질문 드립니다.

현재 프로젝트에서 스프링 시큐리티를 이용한 인증을 사용하고 있고
context-security.xml에 인증부분에 대해 아래와 같이 선언하여 사용하고 있습니다.

<b:bean id="jdbcUserService" class="egovframework.com.sec.security.userdetails.jdbc.EgovJdbcUserDetailsManager" >
<b:property name="usersByUsernameQuery" value="SELECT USER_ID, 1 ENABLED, USER_NM, USER_EMAIL, USER_SE, ESNTL_ID, AUTHOR_CODE
FROM COMVNUSERMASTER m WHERE CONCAT(USER_SE, USER_ID) = ? "/>
<b:property name="authoritiesByUsernameQuery" value="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
FROM COMTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ? "/>
<b:property name="roleHierarchy" ref="roleHierarchy"/>
<b:property name="dataSource" ref="egov.dataSource"/>
<b:property name="mapClass" value="egovframework.com.sec.security.common.EgovSessionMapping"/>
</b:bean>

그래서 실제 자바클래스에서
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
위 메소드를 호출함으로써 정상적으로 인증이 되고
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
위 메소드를 호출함으로써 위에 bean에서 설정한 usersByUsernameQuery 의 결과대로 잘 받아서 사용하고 있습니다.

그러나, 권한관련되어서 로그인한 유저에 대한 화면별 별도의 권한체크를 위해
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:server_security:authorization
위 주소를 참조하여서 아래와 같이 메소드를 호출해서 리스트 객체로 받았습니다만.
List<String> authorities = EgovUserDetailsHelper.getAuthorities();

이게 로그인한 사용자의 실제 권한이 아니고, 전체권한을 불러오더라구요.
제 생각이 맞다면 context-security.xml의 jdbcUserService의 authoritiesByUsernameQuery property에서 수행한 쿼리의 결과값만 (권한) 가져와야 하는거 같은데. 별도의 처리가 필요한가요?

이 부분이 안되서, 현재 다중권한 부분 적용을 못하고 있네요~
확인 부탁드립니다.

답변

안녕하세요. 이준한님.

authoritiesByUsernameQuery에 지정된 결과만이 부여되는 것이 아니라 role 간의 상속관계 설정인 roleHierarchy bean에 의해 상위에 해당되는 role도 같이 부여됩니다.

해당 정보는 COMTNROLES_HIERARCHY (공통컴포넌트 기준) 테이블입니다.

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

이 페이지의 구성

묻고 답하기