권한별 롤관리 재질문
- 작성자 :
- 박*호
- 작성일 :
- 2014-09-01 15:24:59
- 조회수 :
- 1,412
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
지난 28일에 올린 질문에 답변 감사합니다.
현재 ROLE_ADMIN1, ROLE_ADMIN2 각각의 권한에 bbb.do의 롤을 각각 등록을 해둔 상태인데.
이럴 경우에 ROLE_ADMIN1에서는 접근 가능하지만 ROLE_ADMIN2에서는 접근이 안됩니다.
ROLE_ADMIN1에서 롤을 미등록 상태로 바꾸면 ROLE_ADMIN2에서도 접근이 가능합니다.
당연히 이땐 ROLE_ADMIN1에서는 접근이 안됩니다.
ROLE_ADMIN1, ROLE_ADMIN2 둘다 롤 등록 해둔 상태에서, ROLE_ADMIN2로 접근할때 아래와 같은 로그가 뜹니다.
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.web.EgovReloadableDefaultFilterInvocationDefinitionSource] Candidate is: '/manage/bbb.do'; pattern is \A/manage/.*\.do.*\Z; matched=true
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Secure object: FilterInvocation: URL: /manage/bbb.do; ConfigAttributes: [ROLE_ADMIN1]
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Previously Authenticated: org.springframework.security.providers.UsernamePasswordAuthenticationToken@6e3b38d1: Principal: egovframework.com.sec.security.userdetails.EgovUserDetails@0: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN2, ROLE_USER;
Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@2cd90: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: BE7B48F90816E6817F395238AF94D835; Granted Authorities: ROLE_ADMIN2, ROLE_USER
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.ui.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler
org.springframework.security.AccessDeniedException: Access is denied
메시지를 보면 접근 URL패턴을 체크할때 ROLE_ADMIN1의 패턴만 체크를 하는 것 같은데 이럴 경우엔 어떻게 해야하나요?
그리고 comtnroles_hierarchy테이블은 어떤 구조로 등록을 해야 하는건가요??
현재는
ROLE_USER, ROLE_ADMIN1
ROLE_USER, ROLE_ADMIN2
ROLE_ANONYMOUS, IS_AUTHENTICATED_ANONYMOUSLY
IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_REMEMBERED
IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY
IS_AUTHENTICATED_FULLY, ROLE_RESTRICTED
이렇게 ROLE_ADMIN1, ROLE_ADMIN2를 동일한 최상위(children)로 두었는데 틀렸다면 어떻게 해야하는지 좀 알려주시길 바랍니다.
현재 ROLE_ADMIN1, ROLE_ADMIN2 각각의 권한에 bbb.do의 롤을 각각 등록을 해둔 상태인데.
이럴 경우에 ROLE_ADMIN1에서는 접근 가능하지만 ROLE_ADMIN2에서는 접근이 안됩니다.
ROLE_ADMIN1에서 롤을 미등록 상태로 바꾸면 ROLE_ADMIN2에서도 접근이 가능합니다.
당연히 이땐 ROLE_ADMIN1에서는 접근이 안됩니다.
ROLE_ADMIN1, ROLE_ADMIN2 둘다 롤 등록 해둔 상태에서, ROLE_ADMIN2로 접근할때 아래와 같은 로그가 뜹니다.
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.web.EgovReloadableDefaultFilterInvocationDefinitionSource] Candidate is: '/manage/bbb.do'; pattern is \A/manage/.*\.do.*\Z; matched=true
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Secure object: FilterInvocation: URL: /manage/bbb.do; ConfigAttributes: [ROLE_ADMIN1]
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Previously Authenticated: org.springframework.security.providers.UsernamePasswordAuthenticationToken@6e3b38d1: Principal: egovframework.com.sec.security.userdetails.EgovUserDetails@0: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN2, ROLE_USER;
Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@2cd90: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: BE7B48F90816E6817F395238AF94D835; Granted Authorities: ROLE_ADMIN2, ROLE_USER
2014-09-01 15:09:19,468 DEBUG [org.springframework.security.ui.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler
org.springframework.security.AccessDeniedException: Access is denied
메시지를 보면 접근 URL패턴을 체크할때 ROLE_ADMIN1의 패턴만 체크를 하는 것 같은데 이럴 경우엔 어떻게 해야하나요?
그리고 comtnroles_hierarchy테이블은 어떤 구조로 등록을 해야 하는건가요??
현재는
ROLE_USER, ROLE_ADMIN1
ROLE_USER, ROLE_ADMIN2
ROLE_ANONYMOUS, IS_AUTHENTICATED_ANONYMOUSLY
IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_REMEMBERED
IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY
IS_AUTHENTICATED_FULLY, ROLE_RESTRICTED
이렇게 ROLE_ADMIN1, ROLE_ADMIN2를 동일한 최상위(children)로 두었는데 틀렸다면 어떻게 해야하는지 좀 알려주시길 바랍니다.
A
안녕하세요. 박강호님.
URL: /manage/bbb.do; ConfigAttributes: [ROLE_ADMIN1]
부분으로 보면, "\A/manage/.*\.do.*\Z"에 대하여 ROLE_ADMIN1만 할당이 되어 있거나,
"\A/manage/.*\.do.*\Z" 자체가 2개 등록되어 관리되시는 경우 같습니다.
내부적으로 context-security.xml 상에 securedObjectDAO에 지정된 sqlRolesAndUrl query의 결과를 하나의 record씩 반영하면서 바로 이전 패턴가 동일한 경우 할당된 role을 리스트 형태로 지정하도록 되어 있습니다.
즉, "\A/manage/.*\.do.*\Z" 패턴이 하나만 조회되거나, 여러 건 나오더라고 순서적으로 떨어져 있는 경우 같습니다.
확인은 securedObjectDAO 설정 상에 지정되거나 내부적으로 기본 query(실행환경, 공통컴포넌트 등 사용 방식에 따라 다름)를 직접 DBMS로 호출해 보시면 확인이 가능하실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
URL: /manage/bbb.do; ConfigAttributes: [ROLE_ADMIN1]
부분으로 보면, "\A/manage/.*\.do.*\Z"에 대하여 ROLE_ADMIN1만 할당이 되어 있거나,
"\A/manage/.*\.do.*\Z" 자체가 2개 등록되어 관리되시는 경우 같습니다.
내부적으로 context-security.xml 상에 securedObjectDAO에 지정된 sqlRolesAndUrl query의 결과를 하나의 record씩 반영하면서 바로 이전 패턴가 동일한 경우 할당된 role을 리스트 형태로 지정하도록 되어 있습니다.
즉, "\A/manage/.*\.do.*\Z" 패턴이 하나만 조회되거나, 여러 건 나오더라고 순서적으로 떨어져 있는 경우 같습니다.
확인은 securedObjectDAO 설정 상에 지정되거나 내부적으로 기본 query(실행환경, 공통컴포넌트 등 사용 방식에 따라 다름)를 직접 DBMS로 호출해 보시면 확인이 가능하실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.