最近結構書き方の変わったSpring Security
Spring Security5.4~あたりで、いろんなものが非推奨になったり、6.0以降では削除されたり、いろいろ変わりましたね。
WebSecurityConfigurerAdapterが使えなくなって、configureメソッド各種を@Bean
アノテーションを付与し、Beanとして公開するように変更するのが一番大きな変更かな…と思ってます。
それで5.8~非推奨になったメソッドで、antMatchers
とmvcMatcher
があります。
Spring公式から出ているドキュメントでも、requestMatchers
に置き換えられると記載してあります。
でも、確かにコンパイルエラーにはならないけど、起動するとエラーで画面表示できないんですよね…
いやもしかしたらconfigure(HttpSecurity)
メソッドから置き換えたsecurityFilterChain(HttpSecurity)
メソッドなら、requestMatchers
で置き換えてもうまく動作するのかもしれない。サンプルコードもこのメソッドのが多いし。
でもうちでantMatchers
使ってたのは、configure(WebSecurity)
メソッドから置き換えたwebSecurityCustomizer()
メソッドなんですよねー。
困った困った。
でもどこ探してもみんなrequestMatchers
に置き換えられるって書いてあるばかり。少なくともサンプルコードは大体そう。あと大体securityFilterChainの話で、WebSecurityCustomizer はあんまり出てこない。
もう少し時間経つまで待つしかないかなーと思ってたんですけど、やっと見つけました。
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/ignore1", "/ignore2");
}
@Configuration
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
@Configuration
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers(
new AntPathRequestMatcher("/ignore1"),
new AntPathRequestMatcher("/ignore2"));
}
}
requestMatchers
に置き換えるときは、そのままStringでパターンを渡すんじゃなくて、AntPathRequestMatcherでラップしてオブジェクトを渡すと、元のように動きます。
コンストラクタ以外にもAntPathRequestMatcher.antMatcher(String)
も使えます。引数が可変長Stringのものはなかったですが。
RegexRequestMatcher.regexMatcher(String)
も使えるっぽい。
mvcMatcher
からの置き換えは、MvcRequestMatcher
のコンストラクタだと思う。
とりあえず動いてよかったよ…