0
0

SpringBootでログアウト実装を間違えてちゃんとログアウトできていなかった(セッション残)

Last updated at Posted at 2024-04-26

間違い

このように ただログアウトページへのリンクだけ でした。

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<body>
	<h1>login-success</h1>
	<a th:href="@{/logout}">ログアウト</a>
</body>
</html>

こんな動作になってしまっていました。

  1. ログアウトのリンクをクリック。
  2. その後に再度認証が必要なページのURLへ直接行けてしまった。
  3. セッションが残ったまま = ログアウトできていなかった。

正しくはこう

SpringBootにはクロスサイトリクエストフォージェリー対策が施されているので、hiddenパラーメーターを送ってあげる必要がありました。
formであればそのhiddenパラーメーターが送られるようになります。
hiddenパラーメーターのタグはコーディング不要です。
formタグを使えばフレームワーク側で勝手に追加してくれます。

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<body>
	<h1>login-success</h1>
	
	<form th:action="@{/logout}" method="POST">
		<!-- aタグのリンクだとクロスサイトリクエストフォージェリー対策のhiddenパラメータが送られず、セッション破棄されないので注意 -->
  		<button type="submit" value="go">ログアウト</button>
	</form>
	
</body>
</html>

この記事やってる時に発見

参考サイトさん

バージョン

Microsoft Windows [Version 10.0.22631.3447]
JAVA 17.0.10
Spring Boot v3.1.11

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0