2017-09-29 10 views
0

ロールベースのアノテーションとパターンベースの認証構成を結合したい。スプリングセキュリティ:アノテーションベースのロール仕様をパターンベースのロール仕様より優先させる方法

パターンベースの認可を「アノテーションが指定されていない場合のフォールバック」にします。

アノテーション付きメソッドのエンドポイントの例:

@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") 
@RequestMapping(
    method = RequestMethod.POST, 
    headers = "Accept=application/json", 
    path="publicApi/doWork") 
public void doWork() { 
    ... 
} 

そして、私のパターンベースの認証の設定は次のようになります。

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@EnableWebSecurity 
// specifies actuator endpoints should be secured by this config 
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    private void configureEndpointRoles(HttpSecurity http) throws Exception { 
    http.authorizeRequests(). 
     antMatchers(anonymousUrlPatterns()).permitAll(). 
     antMatchers("/publicApi/**").access("hasAnyRole('ROLE_ADMIN')"). 
     anyRequest().denyAll(); 
    ; 
    } 
} 

ここで私が仕事をしたい方法は次のとおりです。

  • エンドポイントURLが "anonymousUrlPatterns" - permitのいずれかと一致する場合
  • エンドポイントが "publicApi"パターンと一致し、@PreAuthorizeと注釈されている場合は、アノテーションの定義を使用してユーザーがアクセスできるかどうかを判断します(この場合、ユーザーにはADMINまたはUSERロールが必要です)。
  • エンドポイントが "publicApi"パターンと一致するが注釈が付けられていない場合は、そのユーザーにアクセスするにはADMINロールが必要です。
  • エンドポイントが上記のどれにも一致しない場合、拒否します。

この動作を定義するにはどうすればよいですか?指定された上記の設定で

、(私は、パターンベースの設定が優先さを取っているか、春は何とかそれらを組み合わせている場合かどうかわからないんだけど?)パターンベースの設定が優先され、エンドポイントの呼び出しは拒否され

春バージョン - 4.2.3


更新:

@EnableGlobalMethodSecurity(
    prePostEnabled = true, 
    order = Ordered.HIGHEST_PRECEDENCE) 

しかし、それ:私はEnableGlobalMethodSecurityを更新しようとしましたその行動を変えていないようだ。

+1

は、それは私がいくつかのカスタム決定マネージャロジック、のようなものを書い伴いますしたい行動のように見えます。おそらく、あなたは['GlobalMethodSecurityConfiguration'](https://docs.spring.io/autorepo/docs/spring-security/4.1.3.RELEASE/apidocs/org/springframework/security/config/annotation/method)のサブクラスを書くことができます。 /configuration/GlobalMethodSecurityConfiguration.html)、カスタム['MethodSecurityMetadataSource'](https://docs.spring.io/autorepo/docs/spring-security/4.1.3.RELEASE/apidocs/org/springframework/security/access)を返します。 /method/MethodSecurityMetadataSource.html)。しかし、Webセキュリティでデフォルトを設定することはできません。別のソースを使用しています。 – dur

答えて