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 IDEAEclipse のような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アプリ開発者として一歩成長です!

他にも気になることがあれば、なんでも聞いてくださいね。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。