EgovUserDetailsHelper.getAuthorities() 활용 관련 문의
- 작성자 :
- 이*한
- 작성일 :
- 2013-10-18 17:23:18
- 조회수 :
- 1,172
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요~
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에서 수행한 쿼리의 결과값만 (권한) 가져와야 하는거 같은데. 별도의 처리가 필요한가요?
이 부분이 안되서, 현재 다중권한 부분 적용을 못하고 있네요~
확인 부탁드립니다.
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에서 수행한 쿼리의 결과값만 (권한) 가져와야 하는거 같은데. 별도의 처리가 필요한가요?
이 부분이 안되서, 현재 다중권한 부분 적용을 못하고 있네요~
확인 부탁드립니다.
A
안녕하세요. 이준한님.
authoritiesByUsernameQuery에 지정된 결과만이 부여되는 것이 아니라 role 간의 상속관계 설정인 roleHierarchy bean에 의해 상위에 해당되는 role도 같이 부여됩니다.
해당 정보는 COMTNROLES_HIERARCHY (공통컴포넌트 기준) 테이블입니다.
그럼, 즐거운 하루되십시오.
감사합니다.
authoritiesByUsernameQuery에 지정된 결과만이 부여되는 것이 아니라 role 간의 상속관계 설정인 roleHierarchy bean에 의해 상위에 해당되는 role도 같이 부여됩니다.
해당 정보는 COMTNROLES_HIERARCHY (공통컴포넌트 기준) 테이블입니다.
그럼, 즐거운 하루되십시오.
감사합니다.