사용자에게 다중권한(AUTH)을 부여하기 위한 방법 문의
- 작성자 :
- 양*유
- 작성일 :
- 2018-04-17 13:05:49
- 조회수 :
- 2,775
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
전자정부 프레임워크 3.5.1 버전에서 사용자에게 1개의 권한을 부여하는 부분을 커스텀하여
사용자별 권한을 다중으로 부여하기 위해 다음과 같은 커스텀 작업 했었습니다..
(적용예시)
사용자1 => ROLE_ADMIN, ROLE_권한1, , ROLE_권한2
사용자2 => ROLE_권한1
사용자3 => ROLE_권한1, ROLE_권한2
(설정설정변경부분)
<beans
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
xmlns:security="http://www.springframework.org/schema/security"
....
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
.....
.....
<security:http access-denied-page="/uat/uia/accessDenied.do" request-matcher="regex">
<security:form-login
authentication-success-handler-ref="loginSuccessHandler"
login-page="/uat/uia/egovLoginUsr.do" />
<security:anonymous/>
<!-- for authorization -->
<security:custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="filterSecurityInterceptor"/>
</security:http>
.....
.....
<bean id="filterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="org.springframework.security.authenticationManager" />
<property name="accessDecisionManager" ref="_accessManager" />
<property name="securityMetadataSource" ref="databaseSecurityMetadataSource" />
</bean>
.....
.....
<bean id="_accessManager" class="egovframework.custom.sec.CustomAffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false" />
<property name="decisionVoters">
<list>
<bean class="egovframework.custom.sec.RoleVoter">
<property name="rolePrefix" value="ROLE_" />
</bean>
.....
</list>
</property>
</bean>
<bean id="databaseSecurityMetadataSource" class="egovframework.custom.sec.CustomReloadableFilterInvocationSecurityMetadataSource">
<constructor-arg ref="requestMap" />
<property name="securedObjectService" ref="securedObjectService"/>
</bean>
현재는 접근가능 리소스의 조회는 CustomReloadableFilterInvocationSecurityMetadataSource를 통해 가져오고
이에 대한 접근권한 관련 decide는 CustomAffirmativeBased의 decide() ->egovframework.custom.sec.RoleVote의 vote() 를 통해 권한을 확인하고 있습니다.
전자정부 3.7.0에서 동일한 역할의 권한 확인을 위해
"securityMetadataSource"로 사용되는 EgovReloadableFilterInvocationSecurityMetadataSource를
사용자가 설정한 대상 클래스로(CustomReloadableFilterInvocationSecurityMetadataSource) 동작하게 하려면 어떻게 설정을 변경해야(context-security.xml파일에서 변경 또는 EgovWebApplicationInitializer.java 파일등에서)
가능할지 답변좀 부탁드립니다.
사용자별 권한을 다중으로 부여하기 위해 다음과 같은 커스텀 작업 했었습니다..
(적용예시)
사용자1 => ROLE_ADMIN, ROLE_권한1, , ROLE_권한2
사용자2 => ROLE_권한1
사용자3 => ROLE_권한1, ROLE_권한2
(설정설정변경부분)
<beans
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
xmlns:security="http://www.springframework.org/schema/security"
....
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
.....
.....
<security:http access-denied-page="/uat/uia/accessDenied.do" request-matcher="regex">
<security:form-login
authentication-success-handler-ref="loginSuccessHandler"
login-page="/uat/uia/egovLoginUsr.do" />
<security:anonymous/>
<!-- for authorization -->
<security:custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="filterSecurityInterceptor"/>
</security:http>
.....
.....
<bean id="filterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="org.springframework.security.authenticationManager" />
<property name="accessDecisionManager" ref="_accessManager" />
<property name="securityMetadataSource" ref="databaseSecurityMetadataSource" />
</bean>
.....
.....
<bean id="_accessManager" class="egovframework.custom.sec.CustomAffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false" />
<property name="decisionVoters">
<list>
<bean class="egovframework.custom.sec.RoleVoter">
<property name="rolePrefix" value="ROLE_" />
</bean>
.....
</list>
</property>
</bean>
<bean id="databaseSecurityMetadataSource" class="egovframework.custom.sec.CustomReloadableFilterInvocationSecurityMetadataSource">
<constructor-arg ref="requestMap" />
<property name="securedObjectService" ref="securedObjectService"/>
</bean>
현재는 접근가능 리소스의 조회는 CustomReloadableFilterInvocationSecurityMetadataSource를 통해 가져오고
이에 대한 접근권한 관련 decide는 CustomAffirmativeBased의 decide() ->egovframework.custom.sec.RoleVote의 vote() 를 통해 권한을 확인하고 있습니다.
전자정부 3.7.0에서 동일한 역할의 권한 확인을 위해
"securityMetadataSource"로 사용되는 EgovReloadableFilterInvocationSecurityMetadataSource를
사용자가 설정한 대상 클래스로(CustomReloadableFilterInvocationSecurityMetadataSource) 동작하게 하려면 어떻게 설정을 변경해야(context-security.xml파일에서 변경 또는 EgovWebApplicationInitializer.java 파일등에서)
가능할지 답변좀 부탁드립니다.
A
안녕하세요.
표준프레임워크센터입니다.
커스톰 하는 사항에 대해서는 센터에서 별도 가이드 해드리지는 않으니
양해 부탁드립니다.
다음 사이트를 참조하시면 작업하시는데 도움이 되지 않을까 싶습니다.
감사합니다.
* 아래 URL 참조
https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html
* 전자정부 위키가이드
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:server_security:authorization
표준프레임워크센터입니다.
커스톰 하는 사항에 대해서는 센터에서 별도 가이드 해드리지는 않으니
양해 부탁드립니다.
다음 사이트를 참조하시면 작업하시는데 도움이 되지 않을까 싶습니다.
감사합니다.
* 아래 URL 참조
https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html
* 전자정부 위키가이드
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:server_security:authorization