Spring Bootでセッション属性に保存されたデータを確認する方法【初心者向けに解説】
こんにちは。ゆうせいです。
今回は「セッション属性に保存されたデータを見たい!」という声にお応えして、Spring Bootでセッション内のデータを確認する方法をわかりやすく紹介していきます。
セッションに何が入ってるかを見ることは、デバッグや不具合解消にとても重要ですよね。
セッション属性ってなに?
まずは「セッション属性」について簡単に復習しておきましょう。
セッション属性とは?
セッション属性とは、HTTPセッション(HttpSession
)に保存されるキーと値のペアのことです。
たとえば、こんな感じです:
session.setAttribute("username", "yamada");
これで、"username"
という名前で "yamada"
という値が保存されます。
セッション属性の確認方法
では、実際にセッションの中身を見るにはどうしたらいいでしょうか?
主に以下の3つの方法があります!
① コントローラーで取得してログに出力する
最も基本的で簡単な方法です。セッションから値を取り出してログに出すだけ。
import jakarta.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SessionCheckController {
private static final Logger logger = LoggerFactory.getLogger(SessionCheckController.class);
@GetMapping("/check-session")
public String checkSession(HttpSession session) {
session.getAttributeNames().asIterator()
.forEachRemaining(name -> {
Object value = session.getAttribute(name);
logger.info("Session Attribute - key: {}, value: {}", name, value);
});
return "Session attributes have been logged.";
}
}
この /check-session
にアクセスすれば、サーバーのログにセッション内の全データが出力されます。
② @SessionAttributes
を使っている場合の確認
Spring MVCでは、セッションに保存するデータを @SessionAttributes
で指定することもあります。
@Controller
@SessionAttributes("user")
public class MyController {
@ModelAttribute("user")
public User createUser() {
return new User();
}
@GetMapping("/show-user")
@ResponseBody
public String showUser(@ModelAttribute("user") User user) {
return user.toString();
}
}
この場合、セッションにある "user"
という属性は、@ModelAttribute("user")
を通じて取り出せます。
③ デバッガーやインスペクターを使う(開発者向け)
IntelliJ IDEA や Eclipse のようなIDEを使っている場合は、ブレークポイントを設定して、セッションの中身をステップ実行で確認することも可能です。
また、Spring Boot Actuator の /actuator/httptrace
エンドポイントを有効にすると、リクエスト情報を含むトレース情報も確認できます(ただしセッションの中身までは表示されません)。
セッションの内容を確認するときの注意点
- セッションに保存されるデータはシリアライズ可能なクラスであること(
Serializable
を実装) - セキュリティに配慮してログ出力すること(個人情報などは出力しない)
例:セッションの中身を表形式でログに出すコード
@GetMapping("/session-info")
public String sessionInfo(HttpSession session) {
StringBuilder sb = new StringBuilder();
sb.append("セッション属性一覧:\n");
session.getAttributeNames().asIterator().forEachRemaining(name -> {
sb.append(String.format("キー:%-15s | 値:%s\n", name, session.getAttribute(name)));
});
return sb.toString();
}
ログやブラウザでわかりやすく確認できるようにフォーマットしておくと便利です。
今後の学習の指針
セッションの中身を「見る」ことができるようになったら、次は以下のようなトピックに進んでみてください!
- セッションの削除・更新の方法
- クッキーとの違いと使い分け
- セッションのスコープを持つBeanの活用方法
- Spring Securityとセッションの関係
「保存されたセッションデータって、どう扱うべき?」
この問いに答えられるようになると、Webアプリ開発者として一歩成長です!
他にも気になることがあれば、なんでも聞いてくださいね。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
