目次
概要
SpringSecurityを使った時のメモ導入の方法を備忘録として残しておく
まずは簡単に実装して徐々に機能を足していく
今回は、SpringSecurityに独自で作成したログインページを使用してログインできるようにカスタムすることを目標とする
開発環境
- Eclipse 2022-06
- Java 17
- SpringSecurity 5.7.3
- thymeleaf 2.7.3
前提
以下ページの内容が完了していること (デフォルトで表示されるログインページでのログイン認証ができること)最小限の設定で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認証、初期パスワードチェック、権限管理】