[공용컴포넌트]권한관리 관련 다시 질문드립니다.
- 작성자 :
- 이*범
- 작성일 :
- 2009-10-12 18:32:42
- 조회수 :
- 3,985
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
먼저 답변 감사합니다.^^
가이드 해주신것처럼, COMTNAUTHORROLERELATE테이블에 모든 ROLE들을
권한과 매핑하였습니다.
(모든URL에 대해 접근이 가능했던 web-000002과 web-000003 ROLE에 대해서는
ROLE_ADMIN에 매핑하였으며, 제가 추가로 생성했던 /ems/*.do 에 대한 ROLE 역시 ROLE_ADMIN에 매핑하였습니다.)
ROLE_ADMIN 권한은 test1계정이 갖는 ROLE_SYM 보다 상위 권한이므로
test1 계정은 모든 URL에 대한 접근권한이 없으며, /ems/*.do 에 대한 접근권한 역시 없다고 볼 수 있습니다.
위와같이 설정된 상태에서 test1계정으로 접속한 후 주소창에"http://localhost:8080/ems/selectSndngMailList.do" 와 같은 URL을 요청하였습니다.
결과는 별다른 반응없이 해당 페이지를 잘 보여주고 있었습니다.
(추가해서 테스트 해본 결과 test1 계정으로 로그인하지 않아도 모든 페이지에 role에 패턴으로 정의된 어떠한 url로도 직접 접근이 가능했습니다.)
Q1)
첨부파일로 서버스타트 하면서 권한과 URL에 대한 매핑정보를 읽어들이는 부분을
디버깅을 통해 추출하였습니다.(securedObjectService.getRolesAndUrl())
첨부파일 보시고 다시 한번 가이드 부탁드립니다.
Q2) 보호자원에 대한 설정을 어딘가에서 해줘야 하는 것은 아닌지 궁금합니다.
(단지, role을 추가하고 권한과 매핑하면 해당 url이 보호자원이 되는 것인지 궁금합니다.)
가이드 해주신것처럼, COMTNAUTHORROLERELATE테이블에 모든 ROLE들을
권한과 매핑하였습니다.
(모든URL에 대해 접근이 가능했던 web-000002과 web-000003 ROLE에 대해서는
ROLE_ADMIN에 매핑하였으며, 제가 추가로 생성했던 /ems/*.do 에 대한 ROLE 역시 ROLE_ADMIN에 매핑하였습니다.)
ROLE_ADMIN 권한은 test1계정이 갖는 ROLE_SYM 보다 상위 권한이므로
test1 계정은 모든 URL에 대한 접근권한이 없으며, /ems/*.do 에 대한 접근권한 역시 없다고 볼 수 있습니다.
위와같이 설정된 상태에서 test1계정으로 접속한 후 주소창에"http://localhost:8080/ems/selectSndngMailList.do" 와 같은 URL을 요청하였습니다.
결과는 별다른 반응없이 해당 페이지를 잘 보여주고 있었습니다.
(추가해서 테스트 해본 결과 test1 계정으로 로그인하지 않아도 모든 페이지에 role에 패턴으로 정의된 어떠한 url로도 직접 접근이 가능했습니다.)
Q1)
첨부파일로 서버스타트 하면서 권한과 URL에 대한 매핑정보를 읽어들이는 부분을
디버깅을 통해 추출하였습니다.(securedObjectService.getRolesAndUrl())
첨부파일 보시고 다시 한번 가이드 부탁드립니다.
Q2) 보호자원에 대한 설정을 어딘가에서 해줘야 하는 것은 아닌지 궁금합니다.
(단지, role을 추가하고 권한과 매핑하면 해당 url이 보호자원이 되는 것인지 궁금합니다.)
A
안녕하세요. 이종범님
A1)
첨부화일이 없어서 직접 동일환경으로 설정하고 테스트 해 보았습니다.
현재의 상태로 보았을때 Spring Security 가 정상적으로 작동하고 있지 않다고 생각됩니다. 동일한 조건으로 환경을 설정하여 테스트 한 결과 test1 계정일때 "ems/selectSndngMailList.do" 요청이 들어오면 AccessDeniedException 이 발생하는 것을 확인하였습니다.
2009-10-12 19:08:02,170 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Secure object: FilterInvocation: URL: /ems/selectSndngMailList.do; ConfigAttributes: [ROLE_ADMIN]
2009-10-12 19:08:02,185 DEBUG [org.springframework.security.ui.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler
org.springframework.security.AccessDeniedException: Access is denied
at org.springframework.security.vote.AffirmativeBased.decide(AffirmativeBased.java:68)
at org.springframework.security.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:262)
at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:106)
..........(이하 생략)
A2)
egovframework.com.sec.ram.security.securedobject.impl.SecuredObjectDAO 클래스를 보면
/**
* url 형식인 보호자원 - Role 맵핑정보를 조회하는 default 쿼리이다.
*/
public static final String DEF_ROLES_AND_URL_QUERY = "SELECT a.ROLE_PTN url, b.AUTHOR_CODE authority ....(이하생략)
라고 정의되어 있는 부분을 구성되어 있는 테이블에 맞게 수정하시면 됩니다.
그럼 수고하십시요
A1)
첨부화일이 없어서 직접 동일환경으로 설정하고 테스트 해 보았습니다.
현재의 상태로 보았을때 Spring Security 가 정상적으로 작동하고 있지 않다고 생각됩니다. 동일한 조건으로 환경을 설정하여 테스트 한 결과 test1 계정일때 "ems/selectSndngMailList.do" 요청이 들어오면 AccessDeniedException 이 발생하는 것을 확인하였습니다.
2009-10-12 19:08:02,170 DEBUG [org.springframework.security.intercept.AbstractSecurityInterceptor] Secure object: FilterInvocation: URL: /ems/selectSndngMailList.do; ConfigAttributes: [ROLE_ADMIN]
2009-10-12 19:08:02,185 DEBUG [org.springframework.security.ui.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler
org.springframework.security.AccessDeniedException: Access is denied
at org.springframework.security.vote.AffirmativeBased.decide(AffirmativeBased.java:68)
at org.springframework.security.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:262)
at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:106)
..........(이하 생략)
A2)
egovframework.com.sec.ram.security.securedobject.impl.SecuredObjectDAO 클래스를 보면
/**
* url 형식인 보호자원 - Role 맵핑정보를 조회하는 default 쿼리이다.
*/
public static final String DEF_ROLES_AND_URL_QUERY = "SELECT a.ROLE_PTN url, b.AUTHOR_CODE authority ....(이하생략)
라고 정의되어 있는 부분을 구성되어 있는 테이블에 맞게 수정하시면 됩니다.
그럼 수고하십시요