【2,000円の講座をテキストにしてみました】 Springboot基礎講座4 〜ログイン認証と自作バリデーション〜
本テキストは、Springbootの基礎を学ぶことができるテキストです。
・Springboot基礎講座1〜MVCモデルを理解する〜
・Springboot基礎講座2 〜DB連携してCRUD実践〜
・Springboot基礎講座3 〜検索機能とページングと非同期通信〜
・Springboot基礎講座4 〜ログインとセッション管理とバリデーション〜
本来は、2,000円で開いていた講座の内容を公開していたのを、テキストにして、一部有料(390円)で公開しています。
今ままでの講座
本講座は、今までの講座の続きとなっております。
本編
本講義では、Springのログイン認証機能の作り方、オリジナルのUserモデルでの認証のやり方、について学びます。
また、オリジナルのバリデーション方法についても学びます。
1. Spring Securityを使ったログイン/ログアウト
本講義では、Spring Securityというライブラリを使って実装します。
1.1 Spring Securityのライブラリを追加
それでは、Spring Securityをpom.xmlに以下の依存ライブラリとして追加しましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Springの主な認証機能は、spring-boot-starter-securityに入っています。
また、今回Thymeleaf上で、Spring Securityの機能を利用するため、thymeleaf-extras-springsecurity5も使用します。
1.2 Spring Securityの概要
Webアプリケーションのセキュリティの機能を追加するフレームワークです。
例えば、ログインしたときのセッション情報を管理したり、認証機能を実施たり、CSRFトークンなどのセキュリティの設定もできます。
これにより悪質な外部からのアクセスからWebアプリケーションを守るようにしています。
Spring Securityは、以下のようなフローで実装されています。
例えば、認証がされていない場合は、DefaultLoingPageGenerationFilterからログイン画面のレスポンスをクライアントに返します。
認証処理が成功した場合は、AuthenticationSuccessHandlerからログイン後の遷移先のレスポンスをクライアントに返します。
認証処理が失敗した場合は、AuthenticationFialureHandlerから失敗時の遷移先のレスポンスをクライアントに返します。
また、このSpring Securityの設定を行うWebSecurityConfigurerAdapterによって、ログイン画面のPATHやログイン成功時の遷移先などを設定することができます。
それでは、実装してみましょう。
1.3 WebSecurityConfigurerAdapterの設定
それでは、Spring Securityの設定情報を作成するクラスを作成します。
パッケージ:com.sample.config
クラス名:WebSecurityConfig
package com.sample.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
LoginSuccessHandler loginSuccessHandler;
@Autowired
LoginFaildHandler loginFaildHandler;
/**
* Web全般のセキュリティ
*/
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/resources/**"); // resources配下は無視
}
/**
* http通信のセキュリティ
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// 認証状態による画面表示の設定
http.authorizeRequests()
.antMatchers("/", "/search", "/signin", "/signup").permitAll() //ログインしなくても画面表示できるPATH
.anyRequest().authenticated(); //その他のリクエストは認証が必要
// ログイン処理の設定
http.formLogin()
.loginPage("/signin") // ログイン画面のパス
.defaultSuccessUrl("/") //ログイン成功時のデフォルトリダイレクト先
.successHandler(loginSuccessHandler) //ログイン成功時の処理
.failureHandler(loginFaildHandler) //ログイン失敗時の処理
.usernameParameter("username") // emailをログインに必要な値に設定
.passwordParameter("password") // パスワード
.permitAll();
// ログアウト処理の設定
http.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/signout")) // ログアウト処理を起動させるパス
.logoutSuccessUrl("/") // ログアウト成功時の遷移先
.deleteCookies("JSESSIONID", "SESSION") //ログアウト時にcookieのJSESSIONIDを削除
.invalidateHttpSession(true) // ログアウト時にセッションを無効にする
.permitAll();
}
/**
* 認証の設定
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 初期ユーザーの設定
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("test@rebelapp.com")
.password(passwordEncoder().encode("test"))
.roles("USER");
}
/**
* パスワードをBCryptでエンコードする設定
*/
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
@Configurationをつけることで設定ファイルとして認識されます。
WebSecurityConfigurerAdapterは、以下のメソッドを実装します。
・void configure(WebSecurity web):Web全般に関わる設定
・void configure(HttpSecurity http):http通信時の設定
・void configure(AuthenticationManagerBuilder auth):認証管理の設定
1.3.1 Web全般に関わる設定
ここから先は
¥ 390
この記事が気に入ったらサポートをしてみませんか?