目次

概要

SpringSecurityを使った時のメモ
導入の方法を備忘録として残しておく
まずは簡単に実装して徐々に機能を足していく
今回は、SpringSecurityのデフォルトログイン画面を使用し、最小限の設定でログイン機能を実装することを目標とする

開発環境

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

SpringSecurityの導入


pom.xmlに依存関係を追加

<dependency>
<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

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

以下のクラスを追加する
今回は、configパッケージを作ってその中にクラスを作っているが、配置場所に決まりはない
package com.example.config;

import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
        
@Configuration
public class SecurityConfig {

	@Bean
	public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
		http.formLogin(login -> login  // フォーム認証の設定記述開始
				.defaultSuccessUrl("/login/success", true) // ログイン成功後のリダイレクト先URL 
				.permitAll()) 
			.authorizeHttpRequests(authz -> authz
				.requestMatchers(PathRequest.toStaticResources().atCommonLocations()) 
					.permitAll()  // /css/**などはログイン無しでアクセス可能
				.anyRequest().authenticated()); // その他は認証が必要

		return http.build();
	}
}

各設定についての補足

  • .requestMatchersから.permitAll()部分がないと、未ログイン時にcssやjavascriptが反映されない
  • ログインページの指定をしていないので、SpringSecurityが用意しているデフォルトのログインページが表示される
  • defaultSuccessUrlの第2引数にtrueを渡すことで、ログイン成功時に必ず指定したURLにリダイレクトするようになる
    (デフォルトでは、URLに指定したページが表示される)
    デフォルト:「localhot:8080/aaa」を入力 → 未ログインのためログインページへ → ログイン成功 → 「/aaa」に関連付けられているページを表示
    trueを指定:「localhot:8080/aaa」を入力 → 未ログインのためログインページへ → ログイン成功 → defaultSuccessUrlに指定のページを表示

コントロ―ラーの修正

コントローラークラスにログイン認証成功時のリクエストがあった時の処理を追記する
@GetMapping("/login/success")
public String loginSuccess() {
	return "top";
}
ログイン認証後に表示するページ(今回の場合はtop.html)はここでは特に記載しないが、適当なページを用意しておく
特に名称等に決まりはなく、コントローラーで指定したページを用意する

実行

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


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

次のステップはこちら 
SpringSecurity 独自ログインページを導入