1

私は何が間違っているのか分かりませんが、ResourceServerConfigurerAdapterを使っていくつかのRESTリソースを保護しようとすると動作しません。 @PreAuthorizeを使用して目標を達成するか、WebSecurityConfigurerAdapterのセキュリティを設定するだけです。Springリソースのセキュリティは '@ PreAuthorize'としか動作しません

実際には、WebSecurityConfigurerAdapterHttpSecurityの設定ですべての可能性を盗んでいます。私は、それはフィルタリングの順序と関係があると信じています。私はドキュメントの情報を検索しましたが、それはかなり曖昧でした。私は春のブートバージョン1.5以降ResourceServerConfigurerAdapterのフィルタリング順序に変更されていることを知っている、と私はプロパティに新しい秩序を設定した後に動作するようにそれを得るために管理:より具体的なのでsecurity.oauth2.resource.filter-order=3

、このコードを

@Override 
public void configure(HttpSecurity http) throws Exception { 
    http.requestMatcher(new OAuthRequestedMatcher()) 
      .anonymous().disable() 
      .authorizeRequests() 
      .antMatchers(HttpMethod.OPTIONS).permitAll() 
      .antMatchers("/api/hello").access("hasAnyRole('USER')") 
      .antMatchers("/api/me").hasAnyRole("USER", "ADMIN"); 
} 

"/api/hello""/api/me"はコントローラメソッドの@PreAuthorize注釈保護することのみ可能である:

を( ResourceServerConfigurerAdapter上の)任意の結果を持っていません

しかし、私はそれがより良い方法で実行できることを恐れています。何か案は?

答えて

1

いくつかの掘削の後、私は解決策を見つけました。この問題は実際にフィルタリングの順序に関係しています。

のOAuth 2リソースフィルターのOAuth2の

デフォルトの順序:あなたは春ブーツ1.5リリースノートから取られ、この通路に見ることができるようピボタルのみんなは、のOAuth2リソースフィルタの順序を変更しましたリソースフィルタが3から SecurityProperties.ACCESS_OVERRIDE_ORDER - 1に変更されました。 アクチュエータエンドポイントの後で、基本認証フィルタチェーンの前に配置されます。 デフォルトは security.oauth2.resource.filter順序を設定することによって復元することができる= 3

しかし、このthreadに@ilovkatieによって指し示されるように、WebSecurityConfigurerAdapterの順序も優先順位を取っ、100に変更しましたResourceServerConfigurerAdapter以上。

ので、代わりにプロパティにResourceServerConfigurerAdapterの順序を変更するは、よりエレガントな解決策はWebSecurityConfigurerAdapter@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)を使用することです。

これは、リソースの設定がWebSecurityConfigurerAdapterよりも優先させるだろうと、@PreAuthorizeアノテーションを使用する必要が作る、ResourceServerConfigurerAdapterHttpSecurityを使用してセキュリティを設定することが可能になります。

関連する問題