Spring Security を使ったフォームログインの仕組み
ほとんどの Web アプリケーションにはログイン機能が実装されています。 Spring Framework による Web アプリケーション開発では、Spring Security を利用することでログイン機能を実装できます。
このレクチャーでは、Spring Security を使ったフォームログインの仕組みについて説明します。 フォームログインは、ユーザー名とパスワードを入力するフォームを表示して、ユーザーを認証する機能です。 フォームログインが UsernamePasswordAuthenticationFilter というフィルターによって実装されていることを理解しましょう。
Spring Security の基本:Filter
Spring Security 仕組みを理解するには、Filter について知る必要があります。 Filter とは、クライアントからのリクエストを受け取ってからレスポンスを生成するまでの間に処理を挟み込むための仕組みです。
Spring で Filter を使うことで、 リクエストが Controller のハンドラーメソッドに到達する前や、レスポンスがクライアントに返される前に処理を追加できます。
Spring Security のアーキテクチャ
Spring Security には、さまざまなセキュリティ機能を実現するための Filter が用意されています:
- CsrfFilter:CSRF(Cross-site Request Forgery)攻撃からアプリケーションを保護するためのフィルター
- UsernamePasswordAuthenticationFilter:ユーザー名とパスワードによるユーザー認証を行うためのフィルター。一般的なフォームログインに使用されます
- LogoutFilter:ログアウトを処理するためのフィルター。ユーザーのセッションを無効化し、ログアウト後のリダイレクトなどの操作を実行します
必要に応じてこれらの Filter を有効にすることで、セキュリティ機能をアプリケーションに実装できます。
フォーム認証の実装方法
Spring Security でのフォーム認証は、UsernamePasswordAuthenticationFilter によって提供されています。 このフィルターは以下のようなコードによって有効にできます。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(
HttpSecurity http
) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.anyRequest().authenticated()
)
.formLogin(login -> login
.loginPage("/login")
.permitAll()
);
return http.build();
}
}
@Configuration
によって、このクラスに@Bean
のついたメソッドが存在することを示しています。Spring の DI コンテナに bean を登録するために必要な記述です。@EnableWebSecurity
は、Spring Security の設定をカスタマイズするクラスに対して付与します。filterChain
メソッドは引数としてHttpSecurity
を受け取り、SecurityFilterChain
を返すメソッドです。このメソッドでフォームログインを有効にする設定をしています。http. ... .formLogin
という呼び出しで、フォームログインを有効にしています。このメソッドの内部では、UsernamePasswordAuthenticationFilter が機能するようにカスタマイズが行われます。.loginPage("/login").permitAll()
という記述によって、ログインページの URL が/login
に設定され、そのページはログインしていないユーザーに対しても公開されるようになります。
まとめ:Spring Security を使ってフォームログインの仕組みを実装する
このレクチャーでは、Spring Security を使ったフォームログインの仕組みについて説明しました。
- Spring Security の機能は Filter によって提供されている
- Spring Security のフォームログインは、UsernamePasswordAuthenticationFilter が担当する
- UsernamePasswordAuthenticationFilter を有効にするには、Spring Security の設定ファイルで formLogin を呼び出す
ほとんどのWebアプリケーションには、ログイン機能が実装されています。 Spring Security は、フォームログイン機能の実装を手助けしてくれます。 この仕組みを活用して、ユーザーのデータを確実に保護し信頼性のあるアプリケーションを提供しましょう。