SpringBootでログインログアウト機能を実装したいと思います。
本記事では、ログアウト機能のみを紹介します。
ログイン機能については、こちらの記事からお願い致します。
SpringBootのプロジェクト
以下の環境でログアウト機能を実装したいと思います。
Project | Gradle |
---|---|
Language | Java |
SpringBoot | 3.1.1 |
Packaging | Jar |
Java | 17 |
- Spring Web
- Thymeleaf
- Spring Security
- PostgresSQL Driver
ログイン、ログアウト機能ということで、ユーザーやパスワードを記憶するデータベースを使います。
今回は、PostgreSQLというデータベースを使用します。
ログアウト機能のリンクを生成
ログイン成功時のページにリンクを生成します。
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body>
<h2>ようこそ</h2>
<a href="/logout">ログアウト</a>
</body>
</html>
SecurityConfig.javaに追記
ログアウト時のURLを指定し、指定ページ遷移する設定をします。
package com.example.demo;
import javax.sql.DataSource;
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.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
@Autowired
private DataSource dataSource;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.authorizeHttpRequests(authorize->{
authorize.anyRequest().permitAll();
});
http.formLogin(form->{
form.defaultSuccessUrl("/home");
});
http.logout(logout ->{
logout.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login");
});
return http.build();
}
@Bean
public UserDetailsManager userDetailsManager() {
return new JdbcUserDetailsManager(this.dataSource);
}
}
全文載せましたが、ログイン機能の記事から変更点は、33行目から36行目までになります。
http.logout(logout ->{
logout.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login");
});
/logoutにアクセスするとログアウト処理をし、ログアウト成功時、/loginページに遷移するという内容になります。
実践
前回の記事のログイン成功時のページからログアウトをしようと思います。
作成したログアウトのリンクをクリックします。
すると、本当にログアウトしますかというページが出現します。
LogOutのボタンをクリックすると,,,
無事ログアウトされ、loginページが表示されました。