2013-07-29 2 views
2

나는 각 역할에 구문을 다음과있는 내 응용 프로그램에서 역할 컨벤션 메커니즘이 내 웹 응용 프로그램의 섹션에 대한 액세스 권한이 부여됩니다. 나는 맹목적으로 <intercept-url pattern="/secure/audit/**" access="APP_*_AUDITOR,APP_ADMINISTRATOR" /> (여기서 APP_ADMINISTRATOR은 나의 기본 관리자 역할 임)을 시도했지만 작동하지 않았습니다. 관리자로 로그인하면 페이지에 액세스 할 수 있지만 APP_DEPARTMENT1_AUDITOR이있는 프로필로 로그인하려고하면 페이지에 액세스 할 수 없습니다.사용하여 와일드 카드는

와일드 카드 표현식이 지원되지 않는다고 생각합니다. 스프링 EL 표현식이 도움이 될 수 있다고 생각하지 않습니다. 또는 충분히 마스터하지 못했습니다.

<intercept-url> 태그 내에서 스프링 보안을위한 역할 패턴을 구성 할 수있는 방법이 있습니까?

답변

2

하나의 솔루션은 role hierarchies에 대한 스프링 시큐리티에 내장 된 지원을 사용하고 개별 부서의 감사 자 역할을 "포함"하는 일반적인 APP_AUDITOR 역할을 지정할 수 있습니다.

기존 구현에서는 simple equality test 만 수행하기 때문에 패턴을 사용할 수있는 자신 만의 향상된 역할 유권자를 만들 수도 있습니다. 이 기존 클래스를 기반으로 패턴 일치를 쉽게 수행 할 수 있어야합니다. 당신이 장소에서, 당신은 보안 인프라와 사용자 정의 유권자 이런 식으로 묶을 수 있다는 것을 일단 : 옵션으로

<http access-decision-manager-ref="myAccessDecisionManager"> 
    ... 
</http> 

<bean id="myAccessDecisionManager" 
    class="org.springframework.security.access.vote.AffirmativeBased"> 
    <constructor-arg name="decisionVoters"> 
     <list> 
     <bean id="patternBasedRoleVoter" 
      class="com.example.PatternBasedRoleVoter"/> 
     <bean id="authenticatedVoter" 
      class="org.springframework.security.access.vote.AuthenticatedVoter"/>    
     </list> 
    </constructor-arg> 
</bean> 
+0

내 응용 프로그램은 현재 어떤 역할 계층 구조도 구현하지 않지만 대답은 향후 고려할 +1 임. –

+0

내 대답이 대안으로 업데이트되었습니다. – zagyi

2

을 당신은 웹 보안 표현식을 사용하도록 conf의 전환 후 사용자 정의 웹 보안 식을 도입 할 수 regex 입력을 처리 할 수 ​​있습니다. 보안 식으로 전환 :

<http use-expressions="true"> 
    <intercept-url pattern="/secure/audit/**" access=" 
     hasRole('APP_DEPARTMENT1_AUDITOR') 
     and hasRole('APP_DEPARTMENT2_AUDITOR') 
     or hasRole('APP_ADMINISTRATOR')" /> 

described here로 정의 hasRegexRole('regex_input') 웹 보안 발현을 소개 :

<http use-expressions="true"> 
    <intercept-url pattern="/secure/audit/**" access=" 
     hasRegexRole('APP_*_AUDITOR') 
     or hasRole('APP_ADMINISTRATOR')" /> 

당신은 당신이 권한을 얻을 수있는 방법을 볼 수 org.springframework.security.access.expression.SecurityExpressionRoot.hasRole(String role) 방법의 소스 코드를 사용할 수 있습니다. 그렇다면 정규식 패턴 일치를 적용해야합니다. 희망이 도움이됩니다.

관련 문제