2016-11-15 19 views
2

私はBean_2からBean_1メソッドを呼び出しています。 Bean_1は、セキュリティ設定、次があります。Spring Security RunAsManagerImplが動作しない

<protect-pointcut expression="execution(* com.proficiency.cg.core.blc.Bean_1.*.*(..))" access="ROLE_Administrators,RUN_AS_InternalRole"/> 

Bean_2 - セキュリティ設定は次の通りです: -

<protect-pointcut expression="execution(* com.proficiency.cg.core.blc.Bean_2.*.*(..))" access="ROLE_InternalRole"/> 

は、追加で、私はRunAsManagerを設定します。

私は私のテストプログラムを実行します

<b:bean id="runAsManager" 
    class="org.springframework.security.access.intercept.RunAsManagerImpl"> 
    <b:property name="key" value="prof_key"/> 
</b:bean> 

<b:bean id="runAsAuthenticationProvider" 
    class="org.springframework.security.access.intercept.RunAsImplAuthenticationProvider"> 
    <b:property name="key" value="prof_key"/> 
</b:bean> 

<global-method-security secured-annotations="enabled" run-as-manager-ref="runAsManager" authentication-manager-ref="authenticationManager"> 
- Bean_2へのアクセス中にセキュリティ例外が発生します。 結論:RunAsManagerは適切に、または環礁では機能しません。

答えて

1

RunAsManagerにはバグがあります。 - デバッグしながら、私は、元RunAsManagerImplの実装では、次のが見つかりました: ...

public Authentication buildRunAs(Authentication authentication, Object object, 
     Collection<ConfigAttribute> attributes) { 
    List<GrantedAuthority> newAuthorities = new ArrayList<GrantedAuthority>(); 

    for (ConfigAttribute attribute : attributes) { 
     if (this.supports(attribute)) { 
      GrantedAuthority extraAuthority = new SimpleGrantedAuthority(
        getRolePrefix() + attribute.getAttribute()); 
      newAuthorities.add(extraAuthority); 
     } 
    } 

すべてがよさそうだが、この方法は、すべての属性を轢か(ROLE_Administrators、RUN_AS_InternalRole)とチェックが文字列では、「RUN_AS_」で始まります。
はいの場合 - (this.supports(...)) - 新しいGrantedAuthority(getRolePrefix()+ attribute.getAttribute())を作成します。
すべてが良いですが、getRolePrefix()は "ROLE_"を返します。実際には、次のような新しいGrantedAuthorityを作成します:ROLE_RUN_AS_InternalRole - 存在しません!
私はこのメソッドを上書きし、新しいGrantedAuthorityを作成する前に属性から "RUN_AS"を削除する独自のRunAsManagerImplを作成しました
これは次のバージョンで修正されることを願っています。

関連する問題