この記事で分かること
- Spring boot (Spring Security)のページにアクセスした時に表示されるログインページを無効化する方法
- Spring boot 3.x系 (Spring Security 6.x系)でのConfiguration設定
この記事では、Spring boot 3以降でSpring Securityを有効にした際に表示されるデフォルトのログインページを無効化する方法について解説します。
Spring SecurityのAutoConfigurationを有効にした場合、各Controllerのエントリーポイントにアクセスすると、デフォルトのログインページが表示される様になります。
デフォルトのログインページではなく、独自に実装した認証方法を使いたい場合はログインページを無効化する必要がありますので、そのConfigurationファイルの書き方を説明します。
Spring boot 2.x系 (Spring Security 5.x系) と Spring boot 3.x系 (Spring Security 6.x系)ではConfiguration方法が変わっており、具体的には、WebSecurityConfigurerAdapter を継承する方法から、SecurityFilterChain を使ってFilterを登録する方法に変更になっています。
SecurityFilterChain を使って登録する新しいやり方についてサンプルコードで解説します。
認証ページを無効化する設定
@Configuration を付加したConfiguration用のクラスで@Bean を使ってSecurityFilterChainを定義します。
ログインページを無効化するのに必要な最低限の記述のみ記載しています。
セキュリティフィルターには、他にも設定可能なフィルターが多数定義されています。以下のリンクに一覧があります。
https://spring.pleiades.io/spring-security/reference/servlet/architecture.html#servlet-security-filters
以下サンプルコードになります。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(customizer -> customizer
.requestMatchers("/api/auth").authenticated() // /api/authは認証が必要なページ
.requestMatchers("/api/**").permitAll() // /api以下はすべて許可
.anyRequest().denyAll()); // その他のリクエストはすべて拒否
return http.build();
}
}
まとめ
最後にこの記事の内容をまとめます。
要点
- Spring boot 3 (Spring Security 6)以降は、SecurityFilterChainを使って認証・認可の設定を行う。
- Spring Security6以降では、WebSecurityConfigurerAdapterを使った設定方法は非推奨
Spring Securityの設定方法は昔から複雑ですが、今回は必要最小限の方法のみ説明しました。
この方法でデフォルトの認証方法を無効化することが出来ますが、多くの場合WebページやAPIへのアクセスには独自の認証が必要になると思います。
作成するWebアプリケーションのセキュリティの重要性に応じて、適切なレベルの認証・認可機能を実装することは変わらず重要です。
それでは、少しでも参考になりましたら幸いです。
参考サイト
- Spring Security
- 認証 :: Spring Security - リファレンスドキュメント (pleiades.io)
- Spring Security 5.4〜6.0でセキュリティ設定の書き方が大幅に変わる件 - Qiita
- SpringSecurityのセキュリティ設定の書き方を変えたのでformLoginテストも対応した - Qiita
- 【Spring Security】認証・認可の基礎 (b1san-blog.com)
- Spring SecurityのSecurity Filterについて - daisuzz.log (hatenablog.jp)