[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
質問
どのような場合に
antMatcher()
対
antMatchers()
?
例えば
http
.antMatcher("/high_level_url_A/**")
.authorizeRequests()
.antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
.antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
.somethingElse()
.anyRequest().authenticated()
.and()
.antMatcher("/high_level_url_B/**")
.authorizeRequests()
.antMatchers("/high_level_url_B/sub_level_1").permitAll()
.antMatchers("/high_level_url_B/sub_level_2").hasRole('USER3')
.somethingElse()
.anyRequest().authenticated()
.and()
...
ここで期待することは
-
にマッチするリクエストはすべて
/high_level_url_A/**
は認証される必要があります +。/high_level_url_A/sub_level_1
のみで、USERと/high_level_url_A/sub_level_2
USER2のみ -
にマッチするリクエストはすべて
/high_level_url_B/**
は認証される必要があります +。/high_level_url_B/sub_level_1
一般公開用と/high_level_url_A/sub_level_2
はUSER3のみ。 - 他のパターンは気にしない - しかし、公開する必要がありますか?
最近の例では
antMatcher()
最近は なぜでしょう?それは
antMatcher()
は不要になったのでしょうか?
解決方法は?
必要なのは
antMatcher
複数の
HttpSecurity
を参照してください。
Spring Security リファレンス
:
5.7 複数のHttpSecurity
複数のHttpSecurityインスタンスを設定することができます。
<http>
ブロックがあります。重要なのはWebSecurityConfigurationAdapter
を複数回実行します。例えば、以下のように、URLの先頭が/api/
.@EnableWebSecurity public class MultiHttpSecurityConfig { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) { 1 auth .inMemoryAuthentication() .withUser("user").password("password").roles("USER").and() .withUser("admin").password("password").roles("USER", "ADMIN"); } @Configuration @Order(1) 2 public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/api/**") 3 .authorizeRequests() .anyRequest().hasRole("ADMIN") .and() .httpBasic(); } } @Configuration 4 public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin(); } } }
1 通常通り認証の設定を行う
2 インスタンスの作成
WebSecurityConfigurerAdapter
を含む@Order
を指定することで、どのWebSecurityConfigurerAdapter
が最初に考慮されるべきです。3は
http.antMatcher
は、このHttpSecurity
で始まるURLに対してのみ適用されます。/api/
のインスタンスをもう一つ作成します。
WebSecurityConfigurerAdapter
. URLの先頭が/api/
この設定が使用されます。このコンフィギュレーションはApiWebSecurityConfigurationAdapter
を持つので@Order
の後の値です。1
(いいえ@Order
はデフォルトで最後になります)。
あなたの場合
antMatcher
というのも、コンフィギュレーションは1つだけだからです。修正したコード
http
.authorizeRequests()
.antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
.antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
.somethingElse() // for /high_level_url_A/**
.antMatchers("/high_level_url_A/**").authenticated()
.antMatchers("/high_level_url_B/sub_level_1").permitAll()
.antMatchers("/high_level_url_B/sub_level_2").hasRole('USER3')
.somethingElse() // for /high_level_url_B/**
.antMatchers("/high_level_url_B/**").authenticated()
.anyRequest().permitAll()
関連
-
[解決済み】BindingResultもBean名のプレーンターゲットオブジェクトもリクエスト属性として利用できない [重複].
-
[解決済み] Spring 3 リクエスト処理に失敗しました。ネストされた例外は java.lang.NullPointerException です。
-
[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
-
[解決済み】Spring SecurityのRoleとGrantedAuthorityの違いについて
-
[解決済み】Spring MVCで静的コンテンツを処理する方法は?
-
[解決済み] JAX-RSとSpring Restの違いについて
-
[解決済み] SwaggerのURLに認証なしでアクセスできるようにSpring Securityを設定する方法
-
[解決済み] Spring3コントローラで "ModelAndView "と "String "を返すのはどっちがいい?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】BindingResultもBean名のプレーンターゲットオブジェクトもリクエスト属性として利用できない [重複].
-
[解決済み] Spring 3 リクエスト処理に失敗しました。ネストされた例外は java.lang.NullPointerException です。
-
[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
-
[解決済み】Spring MVCで静的コンテンツを処理する方法は?
-
[解決済み] JAX-RSとSpring Restの違いについて
-
[解決済み] SwaggerのURLに認証なしでアクセスできるようにSpring Securityを設定する方法
-
[解決済み] Spring3コントローラで "ModelAndView "と "String "を返すのはどっちがいい?