目次

概要

SpringSecurityを使った時のメモ
導入の方法を備忘録として残しておく
まずは簡単に実装して徐々に機能を足していく
今回は、SpringSecurityに独自で作成したログインページを使用してログインできるようにカスタムすることを目標とする

開発環境

  • Eclipse 2022-06
  • Java 17
  • SpringSecurity 5.7.3
  • thymeleaf 2.7.3
SpringSecurityはver5.7で設定方法が大きく変わるそうなので注意

前提

以下ページの内容が完了していること (デフォルトで表示されるログインページでのログイン認証ができること)
最小限の設定でSpringSecurityを導入する

SpringSecurityの設定を行うクラスに追記する

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
	http.formLogin(login -> login  // フォーム認証の設定記述開始
/* 追記ここから*/
			.loginPage("/login") //ログインページのURL
			.loginProcessingUrl("/login/process") //ログイン処理のパス(このURLにリクエストが送られると認証処理が実行される)
			.usernameParameter("user") // ログインページのユーザー名入力欄のname属性に指定する値
			.passwordParameter("pass") // ログインページのパスワード入力欄のname属性に指定する値
/* 追記ここまで*/
			.defaultSuccessUrl("/login/success", true)
			.permitAll()) // ログイン成功後のリダイレクト先URL 
		.authorizeHttpRequests(authz -> authz
			.requestMatchers(PathRequest.toStaticResources().atCommonLocations()) 
				.permitAll()  // /css/**などはログイン無しでアクセス可能
			.anyRequest().authenticated()); // その他は認証が必要
	return http.build();
}

各設定についての補足

  • loginProcessingUrlに指定したURLにリクエストが送信されると認証処理が実行される
    そのため、ログインページのformタグのaction属性にはloginProcessingUrlに指定したURLを指定する
  • usernameParameterはログインページのユーザー名に該当する入力欄のname属性の値と一致させる
  • passwordParameterはログインページのパスワードに該当する入力欄のname属性の値と一致させる

コントローラーの修正

コントローラーにログインページを表示するための設定を追記する
SpringSecurityの設定を行うクラスで、loginPageに指定したURLとログインページをマッピングすること
@GetMapping("/login")
public String login() {
	return "login";
}

ログインページの作成

login.htmlを例えば以下のように作成する
ファイル名は特に決まりはないが、コントローラーで指定したファイル名にする
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- th:actionはloginProcessingUrlの値と一致させる -->
	<form th:action="@{/login/process}" method="post">
		<div>
			ユーザー名:
      <!-- th:nameはusernameParameterの値と一致させる -->
			<input type="text" th:name="user">
		</div>
		<div>
			パスワード:
      <!-- th:nameはpasswordParameterの値と一致させる -->
			<input type="password" th:name="pass">
		</div>
		<button type="submit">ログイン</button>
	</form>
</body>
</html>

動作確認


SpringBootを実行して、ブラウザから「localhost:8080/aaa」にアクセスする(aaaの部分はなんでもよい)
以下の画面が表示されてればOK

以下の認証情報を入力し、ログインボタンをクリックすることで、認証成功時のページに遷移できればOK
ユーザー名:user
パスワード:springBootを実行した時のコンソールを確認し、「Using generated security password:」の右側に表示されている文字列

次のステップはこちら 
SpringSecurity【DB認証、初期パスワードチェック、権限管理】