권한 계층 적용 안하는 방법이 궁금합니다.(추가질문제거)
- 작성자 :
- 박*호
- 작성일 :
- 2015-02-02 17:22:38
- 조회수 :
- 1,388
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요. egov 2.7 기반으로 웹사이트 제작중입니다.
권한계층이 적용되어있어서 제거하기 위해 COMTNROLES_HIERARCHY 테이블 내용을 모두 삭제했습니다.
권한 상속 테이블이 비었으므로 권한 상속이 이루어지지 않을거라 생각했는데
ROLE_USER 권한이 있는 유저 로그인시 IS_AUTHENTICATED_FULLY 권한이 상속이되고 있습니다.
스프링 시큐리티의 기본적인 권한 상속이 설정되어 있는 것 같은데.
어떤 종류의 권한계층 설정이 기본으로 정의되어 있는지 궁금합니다.
또 기본설정을 어떻게 제거할 수 있는지 부탁드립니다.
기본설정 말고 COMTNROLES_HIERARCHY 테이블에 제가 정의한 설정만 적용하고 싶습니다.
테이블이 비었으면 권한 상속이 안되어야 되는데 IS_AUTHENTICATED_FULLY 권한이 ROLE_USER 에게 상속되고 있네요..
----------------------------------------------------------------------------------------------------------------------------------------------------
권한 상속 문제 외에도 권한이 없는데도 ROLL_USER가 모든 페이지가 조회가 되어 추가질문 드립니다.
아래의 롤 권한이 부여되어 있습니다.
\A/uat/uia/.*\.do.*\Z ROLE_ANONYMOUS
\A/uat/uia/.*\.do.*\Z ROLE_USER
/EgovLeft.do ROLE_USER
\A/uat/uia/.*\.do.*\Z ROLE_ADMIN
/EgovLeft.do ROLE_ADMIN
ROLE_ANONYMOUS 접근시 로그인페이지 말고는 아무것도 접근이 되지 않습니다.
그리고 ROLE_USER 권한을 가진 USER로 로그인시
로그인과 좌측메뉴만 권한지정이 되어있는데 모든 페이지가 다 조회가 됩니다.
로그파일 첨부해 드립니다.
주말에 계속 찾아봤는데 원인을 못찾겠습니다.
Public object - authentication not attempted 인데 AccessDeniedException이 발생하지 않습니다.
참고로 컨트롤러단에 들어가있는 아래 로직은 제거를 했습니다.
체인 필터에서 체크되어 거부되어야지 로직상에서 체크가 들어가는건 중복체크라 판단되었네요.
// 0. Spring Security 사용자권한 처리
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if(!isAuthenticated) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "egovframework/com/uat/uia/EgovLoginUsr";
}
--------------------------------------------------------------------------------------------------------------
권한계층이 적용되어있어서 제거하기 위해 COMTNROLES_HIERARCHY 테이블 내용을 모두 삭제했습니다.
권한 상속 테이블이 비었으므로 권한 상속이 이루어지지 않을거라 생각했는데
ROLE_USER 권한이 있는 유저 로그인시 IS_AUTHENTICATED_FULLY 권한이 상속이되고 있습니다.
스프링 시큐리티의 기본적인 권한 상속이 설정되어 있는 것 같은데.
어떤 종류의 권한계층 설정이 기본으로 정의되어 있는지 궁금합니다.
또 기본설정을 어떻게 제거할 수 있는지 부탁드립니다.
기본설정 말고 COMTNROLES_HIERARCHY 테이블에 제가 정의한 설정만 적용하고 싶습니다.
테이블이 비었으면 권한 상속이 안되어야 되는데 IS_AUTHENTICATED_FULLY 권한이 ROLE_USER 에게 상속되고 있네요..
----------------------------------------------------------------------------------------------------------------------------------------------------
권한 상속 문제 외에도 권한이 없는데도 ROLL_USER가 모든 페이지가 조회가 되어 추가질문 드립니다.
아래의 롤 권한이 부여되어 있습니다.
\A/uat/uia/.*\.do.*\Z ROLE_ANONYMOUS
\A/uat/uia/.*\.do.*\Z ROLE_USER
/EgovLeft.do ROLE_USER
\A/uat/uia/.*\.do.*\Z ROLE_ADMIN
/EgovLeft.do ROLE_ADMIN
ROLE_ANONYMOUS 접근시 로그인페이지 말고는 아무것도 접근이 되지 않습니다.
그리고 ROLE_USER 권한을 가진 USER로 로그인시
로그인과 좌측메뉴만 권한지정이 되어있는데 모든 페이지가 다 조회가 됩니다.
로그파일 첨부해 드립니다.
주말에 계속 찾아봤는데 원인을 못찾겠습니다.
Public object - authentication not attempted 인데 AccessDeniedException이 발생하지 않습니다.
참고로 컨트롤러단에 들어가있는 아래 로직은 제거를 했습니다.
체인 필터에서 체크되어 거부되어야지 로직상에서 체크가 들어가는건 중복체크라 판단되었네요.
// 0. Spring Security 사용자권한 처리
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if(!isAuthenticated) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "egovframework/com/uat/uia/EgovLoginUsr";
}
--------------------------------------------------------------------------------------------------------------
A
안녕하세요. 박진호님.
우선 상속관계를 지정하신 않으시면 ROLE_USER가 IS_AUTHENTICATED_FULLY를 자동으로 상속하진 않습니다. 아마도 계층테이블 삭제 후 재기동이 되지 않으신 경우 같습니다.
이 부분은 다시 확인 부탁드립니다.
추가로 Spring Security를 사용하시기 위해서는 다음 3가지 권한을 기본으로 상속을 받으셔야 합니다.
- IS_AUTHENTICATED_ANONYMOUSLY : 익명 사용자
- IS_AUTHENTICATED_FULLY : 인증 사용자
- IS_AUTHENTICATED_REMEMBERED : remebere me 방식으로 인증된 사용자
물론 이 3가지를 사용하지 않으실 수 있으나 AuthenticatedVoter를 확장하는 등의 추가적인 커스터마이징이 필요합니다. (이 부분은 답변의 범위를 벗어나기 때문에 생략)
계층에 대한 처리는 "ROLE_"로 시작하면서 위 "IS_"로 시작하는 role을 상속하는 방식으로 정의하시거나,
"ROLE_"를 정의하지 않으시더라도 "IS_"를 직접 할당하실 수 있습니다.
ROLE_USER가 모두 페이지를 접속할 수 있다고 말씀하신 부분은 현재 계층구조가 어떻게 적용되고 있고, 인증된 사용자가 어떤 권한을 가졌는지 정보가 없어서 뭐라 답변 드리기기 아려울 것 같습니다.
세부적인 로그 정보를 올려 주시면 다시 확인해 보겠습니다.
마지막으로 제거하신 부분은 중복은 아닙니다. 이는 Spring Security가 적용되지 않은 경우에도 처리 가능하도록 하는 부분으로 Spring Security가 아닌 일반 Session 방식의 인증 등을 지원합니다.
혹은 Spring Security가 적용되어 있더라도, 패턴으로 잘못 지정된 경우에도 처리 가능하도록 지원합니다.
(해당 부분은 Spring Security 설정에 의해 정확하게 통제가 되신다면 삭제하셔도 됩니다.)
그럼, 즐거운 하루되십시오.
감사합니다.
우선 상속관계를 지정하신 않으시면 ROLE_USER가 IS_AUTHENTICATED_FULLY를 자동으로 상속하진 않습니다. 아마도 계층테이블 삭제 후 재기동이 되지 않으신 경우 같습니다.
이 부분은 다시 확인 부탁드립니다.
추가로 Spring Security를 사용하시기 위해서는 다음 3가지 권한을 기본으로 상속을 받으셔야 합니다.
- IS_AUTHENTICATED_ANONYMOUSLY : 익명 사용자
- IS_AUTHENTICATED_FULLY : 인증 사용자
- IS_AUTHENTICATED_REMEMBERED : remebere me 방식으로 인증된 사용자
물론 이 3가지를 사용하지 않으실 수 있으나 AuthenticatedVoter를 확장하는 등의 추가적인 커스터마이징이 필요합니다. (이 부분은 답변의 범위를 벗어나기 때문에 생략)
계층에 대한 처리는 "ROLE_"로 시작하면서 위 "IS_"로 시작하는 role을 상속하는 방식으로 정의하시거나,
"ROLE_"를 정의하지 않으시더라도 "IS_"를 직접 할당하실 수 있습니다.
ROLE_USER가 모두 페이지를 접속할 수 있다고 말씀하신 부분은 현재 계층구조가 어떻게 적용되고 있고, 인증된 사용자가 어떤 권한을 가졌는지 정보가 없어서 뭐라 답변 드리기기 아려울 것 같습니다.
세부적인 로그 정보를 올려 주시면 다시 확인해 보겠습니다.
마지막으로 제거하신 부분은 중복은 아닙니다. 이는 Spring Security가 적용되지 않은 경우에도 처리 가능하도록 하는 부분으로 Spring Security가 아닌 일반 Session 방식의 인증 등을 지원합니다.
혹은 Spring Security가 적용되어 있더라도, 패턴으로 잘못 지정된 경우에도 처리 가능하도록 지원합니다.
(해당 부분은 Spring Security 설정에 의해 정확하게 통제가 되신다면 삭제하셔도 됩니다.)
그럼, 즐거운 하루되십시오.
감사합니다.