권한에 따른 ROLE 지정 처리에 관한 질문입니다.
- 작성자 :
- 주*수
- 작성일 :
- 2015-10-19 09:59:54
- 조회수 :
- 1,670
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
현재 전자정부프레임워크 3.5.1 로 엔터프라이즈 템플릿을 생성해서 권한-롤 관련해서 보고 있습니다.
여기서 궁금증이 생기는게 몇 군데 있어서 글을 올립니다.
1. 권한 계층 테이블인 LETTNROLES_HIERARCHY 의 내용을 보면 부모-자식 컬럼으로 구성되어 있는데
그 이유는, 부모 권한에 들어있는 롤을 기본으로 해서 그 부모를 가진 자식은 본인의 롤까지 다 사용할수 있다는 것인가요?
이 테이블이 왜 필요한것인지 궁금합니다.
2. 엔터프라이즈 템플릿을 기동하고 로그인을 하면 springsecurity에서 아래와 같이 사용자의 인증여부를 처리하고 있습니다.
Authentication authentication = context.getAuthentication();
그런데 그 이후에는 springsecurity를 사용해서 각 메뉴를 접근할때마다 현재 접근한 유저의 권한(ROLE_ADMIN)을 확인하여
해당 권한에 속해있는 롤에 따라 보여줄지 안보여줄지 (롤 등록 여부 확인) 결정하여 권한이 없습니다 등의 페이지를 보여줘야
된다고 알고 있는데 그 부분에 대해서는 처리가 나와 있지 않는것 같습니다.
예를 들어. ROLE_ADMIN 권한이 있는 ADMIN 유저로 로그인을 했습니다. ROLE ADMIN권한에는 우편관리 ROLE이 등록되어
있지 않는 미등록 상태 입니다. 하지만 메뉴에는 등록이 되어 있습니다.
이럴 경우, 우편관리 메뉴가 보이더라도 클릭시, 권한이 없습니다 라는 화면과 함께 접근이 되지 않아야 한다고 생각합니다.
그런데 화면에 들어갑니다. 분명 URL(/sym/ccm/zip/.*.do.*)이 제대로 지정되어 있는데 말이죠.
별도의 개발이 필요한건지, 아니면 사용방법을 잘 모르는 상황인건지 확인 부탁드립니다.
여기서 궁금증이 생기는게 몇 군데 있어서 글을 올립니다.
1. 권한 계층 테이블인 LETTNROLES_HIERARCHY 의 내용을 보면 부모-자식 컬럼으로 구성되어 있는데
그 이유는, 부모 권한에 들어있는 롤을 기본으로 해서 그 부모를 가진 자식은 본인의 롤까지 다 사용할수 있다는 것인가요?
이 테이블이 왜 필요한것인지 궁금합니다.
2. 엔터프라이즈 템플릿을 기동하고 로그인을 하면 springsecurity에서 아래와 같이 사용자의 인증여부를 처리하고 있습니다.
Authentication authentication = context.getAuthentication();
그런데 그 이후에는 springsecurity를 사용해서 각 메뉴를 접근할때마다 현재 접근한 유저의 권한(ROLE_ADMIN)을 확인하여
해당 권한에 속해있는 롤에 따라 보여줄지 안보여줄지 (롤 등록 여부 확인) 결정하여 권한이 없습니다 등의 페이지를 보여줘야
된다고 알고 있는데 그 부분에 대해서는 처리가 나와 있지 않는것 같습니다.
예를 들어. ROLE_ADMIN 권한이 있는 ADMIN 유저로 로그인을 했습니다. ROLE ADMIN권한에는 우편관리 ROLE이 등록되어
있지 않는 미등록 상태 입니다. 하지만 메뉴에는 등록이 되어 있습니다.
이럴 경우, 우편관리 메뉴가 보이더라도 클릭시, 권한이 없습니다 라는 화면과 함께 접근이 되지 않아야 한다고 생각합니다.
그런데 화면에 들어갑니다. 분명 URL(/sym/ccm/zip/.*.do.*)이 제대로 지정되어 있는데 말이죠.
별도의 개발이 필요한건지, 아니면 사용방법을 잘 모르는 상황인건지 확인 부탁드립니다.
A
안녕하세요. 표준프레임워크센터입니다.
1. 권한 계층 테이블인 LETTNROLES_HIERARCHY 의 내용을 보면 부모-자식 컬럼으로 구성되어 있는데
그 이유는, 부모 권한에 들어있는 롤을 기본으로 해서 그 부모를 가진 자식은 본인의 롤까지 다 사용할수 있다는 것인가요?
이 테이블이 왜 필요한것인지 궁금합니다.
//말씀하신게 맞습니다. 계층 구조로 부모 권한의 롤을 자식이 상속받아 사용할 수 있습니다. 해당 테이블을 통해 권한별로 자원(URL, method, pointcut)관리를 할 수 있습니다.
2. 엔터프라이즈 템플릿을 기동하고 로그인을 하면 springsecurity에서 아래와 같이 사용자의 인증여부를 처리하고 있습니다.
Authentication authentication = context.getAuthentication();
그런데 그 이후에는 springsecurity를 사용해서 각 메뉴를 접근할때마다 현재 접근한 유저의 권한(ROLE_ADMIN)을 확인하여
해당 권한에 속해있는 롤에 따라 보여줄지 안보여줄지 (롤 등록 여부 확인) 결정하여 권한이 없습니다 등의 페이지를 보여줘야
된다고 알고 있는데 그 부분에 대해서는 처리가 나와 있지 않는것 같습니다.
예를 들어. ROLE_ADMIN 권한이 있는 ADMIN 유저로 로그인을 했습니다. ROLE ADMIN권한에는 우편관리 ROLE이 등록되어
있지 않는 미등록 상태 입니다. 하지만 메뉴에는 등록이 되어 있습니다.
이럴 경우, 우편관리 메뉴가 보이더라도 클릭시, 권한이 없습니다 라는 화면과 함께 접근이 되지 않아야 한다고 생각합니다.
그런데 화면에 들어갑니다. 분명 URL(/sym/ccm/zip/.*.do.*)이 제대로 지정되어 있는데 말이죠.
별도의 개발이 필요한건지, 아니면 사용방법을 잘 모르는 상황인건지 확인 부탁드립니다
//해당 부분은 기본적으로 스프링시큐리티에서 제공하고 있습니다. 현재 제공하는 엔터프라이즈 템플릿 기준으로 context-security 파일을 열어보시면, 해당 간소화설정의 흐름을 살펴보시면 크게 'egov-security:config' 태그에서 유저의 인증, 인증시 해당 유저의 정보, 정보를 담는 mapclass를 정의하고 'egov-security:secured-object-config' 태그에서 자원에 접근시(URL 등) 자원정보를 조회하여 유저의 권한과 비교하여 접근제어를 합니다.
egov-security:config 태그 내에 'accessDeniedUrl' 엘리멘트를 통해 권한이 없을 경우 denied 설정이 됩니다. 현재 제공하는 엔터프라이즈 템플릿에는 ROLE_ADMIN의 권한에 우편번호(sym-ccm-zip) 기능은 등록상태로 제공되고 있어, 해당 URL(/sym/ccm/zip/.*.do.*)에 접근이 가능합니다.
만약 질문하시는 내용이 '미등록'으로 변경하였는데도 접근이 되는 것에 대한 문의라면, 권한 등의 설정이 was에 캐싱되어 관리되기 때문에 was를 재시작하면 설정이 적용됩니다. 별도로 바로 적용하는 방법은 개별 컨트롤러에서 자원이나 권한 저장후에 databaseSecurityMetadataSource.reload(); 호출하시면 됩니다.
감사합니다.
1. 권한 계층 테이블인 LETTNROLES_HIERARCHY 의 내용을 보면 부모-자식 컬럼으로 구성되어 있는데
그 이유는, 부모 권한에 들어있는 롤을 기본으로 해서 그 부모를 가진 자식은 본인의 롤까지 다 사용할수 있다는 것인가요?
이 테이블이 왜 필요한것인지 궁금합니다.
//말씀하신게 맞습니다. 계층 구조로 부모 권한의 롤을 자식이 상속받아 사용할 수 있습니다. 해당 테이블을 통해 권한별로 자원(URL, method, pointcut)관리를 할 수 있습니다.
2. 엔터프라이즈 템플릿을 기동하고 로그인을 하면 springsecurity에서 아래와 같이 사용자의 인증여부를 처리하고 있습니다.
Authentication authentication = context.getAuthentication();
그런데 그 이후에는 springsecurity를 사용해서 각 메뉴를 접근할때마다 현재 접근한 유저의 권한(ROLE_ADMIN)을 확인하여
해당 권한에 속해있는 롤에 따라 보여줄지 안보여줄지 (롤 등록 여부 확인) 결정하여 권한이 없습니다 등의 페이지를 보여줘야
된다고 알고 있는데 그 부분에 대해서는 처리가 나와 있지 않는것 같습니다.
예를 들어. ROLE_ADMIN 권한이 있는 ADMIN 유저로 로그인을 했습니다. ROLE ADMIN권한에는 우편관리 ROLE이 등록되어
있지 않는 미등록 상태 입니다. 하지만 메뉴에는 등록이 되어 있습니다.
이럴 경우, 우편관리 메뉴가 보이더라도 클릭시, 권한이 없습니다 라는 화면과 함께 접근이 되지 않아야 한다고 생각합니다.
그런데 화면에 들어갑니다. 분명 URL(/sym/ccm/zip/.*.do.*)이 제대로 지정되어 있는데 말이죠.
별도의 개발이 필요한건지, 아니면 사용방법을 잘 모르는 상황인건지 확인 부탁드립니다
//해당 부분은 기본적으로 스프링시큐리티에서 제공하고 있습니다. 현재 제공하는 엔터프라이즈 템플릿 기준으로 context-security 파일을 열어보시면, 해당 간소화설정의 흐름을 살펴보시면 크게 'egov-security:config' 태그에서 유저의 인증, 인증시 해당 유저의 정보, 정보를 담는 mapclass를 정의하고 'egov-security:secured-object-config' 태그에서 자원에 접근시(URL 등) 자원정보를 조회하여 유저의 권한과 비교하여 접근제어를 합니다.
egov-security:config 태그 내에 'accessDeniedUrl' 엘리멘트를 통해 권한이 없을 경우 denied 설정이 됩니다. 현재 제공하는 엔터프라이즈 템플릿에는 ROLE_ADMIN의 권한에 우편번호(sym-ccm-zip) 기능은 등록상태로 제공되고 있어, 해당 URL(/sym/ccm/zip/.*.do.*)에 접근이 가능합니다.
만약 질문하시는 내용이 '미등록'으로 변경하였는데도 접근이 되는 것에 대한 문의라면, 권한 등의 설정이 was에 캐싱되어 관리되기 때문에 was를 재시작하면 설정이 적용됩니다. 별도로 바로 적용하는 방법은 개별 컨트롤러에서 자원이나 권한 저장후에 databaseSecurityMetadataSource.reload(); 호출하시면 됩니다.
감사합니다.