0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Eclipse】SpringBootでcookieを操作する

Last updated at Posted at 2023-06-27

はじめに

この記事ではcookieの操作について学習結果をまとめています。保存、取得、削除、それぞれをSpringBootで実行する方法についてコントローラーの扱い方などについて参考になれば幸いです

cookieは何かについては次の参考記事にまとめています

cookieの操作コードはcontrollerクラスに記述する

Spring Bootでは、Cookieの操作はControllerクラスで行うことが多いですが、それが唯一の方法ではありません。場合によってはServiceクラスやUtilityクラスなど他の部分で行うこともあります。ただし、一般的にはHTTPリクエストとレスポンスに直接関与する作業はControllerに記述します。

コントローラーの作成場所

Spring Bootプロジェクトにおいて、Controllerクラスを作成するための特定のディレクトリは明確には決まっていませんが、慣習的にはsrc/main/javaディレクトリの下にある、パッケージ構造に従った適切な場所に作成します。

たとえば、もしアプリケーションの基本パッケージがcom.example.myappであれば、一般的にはControllerクラスはcom.example.myapp.controllerパッケージ内に作成します。

パッケージ名について

パッケージ名(特に基本パッケージ名)は通常、組織の規約に基づいて決定されます。一般的には、組織のインターネットドメイン名を逆にしたものが使われます。パッケージ名はEclipseのプロジェクトの作成ウィザードですでに設定されています。組織のウェブサイトがwww.example.comであれば、com.exampleという基本パッケージ名が使われます。学習段階でパッケージの名称に迷う場合は画像のパッケージ名を参考にパッケージを作成し学習を進めてください。

cookie用のコントローラーを作成する

スクリーンショット 2023-06-27 15.17.39.png
スクリーンショット 2023-06-27 15.19.13.png

Get通信(Getパラメータ)をcookieに保存する

Get通信はURLにパラメータを含ませて送信する方法です
次の例文ではGet通信で送られたパラメータをcookieに保存することができます

本来cookieの保存はPostメソッドで実行されますが、
解説のためにGet通信の場合をご参照ください

CookieController.java
package com.example.controller;

// 必要なインポートは上書き保存で補完されます
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/cookie") 
public class CookieController {
    
    @GetMapping("/set")  
    @ResponseBody // htmlではなく直接ブラウザに文字を出力します
    public String setCookie(@RequestParam String value, HttpServletResponse res) {
        // cookie名をtest_cookieとして保存します
        res.addCookie(new Cookie("test_cookie", value));
        return "保存しました";
    }
}

次のURLでリクエストを送信することでtestというパラメータが保存されます
Getメソッドのパラメータは?以降に設定されます

@RequestParam

getメソッドに設定したvalueの値を取得するアノテーションです
今回はvalue=testだったのでtestという値を引数で渡しています

@RequestParam String value

HttpServletResponse

HttpServletResponseクラスのaddCookieメソッドはリクエストを送信したユーザーのブラウザにcookieの保存を命令します

public String メソッド名(HttpServletResponse res) {
    res.addCookie(Cookieクラスのオブジェクト);
    // 後続処理
}

Cookieクラスのオブジェクト

新しいCookieクラスでcookie情報を生成します。

new Cookie("cookie名", )

このメソッドは新しいCookieオブジェクトをJavaのメモリ上に作成するだけで、つまり入れ物を作成しただけに止まります。この時点ではまだクライアント(通常はウェブブラウザ)には送信されず、結果クライアントに保存もされません。

この作成されたCookieオブジェクトをクライアントに送信し、クライアントに保存させるためには、このオブジェクトをHTTPレスポンスに追加し、そのレスポンスをクライアントに送信する必要があります。これを行うためには、 HttpServletResponseaddCookieメソッドを使用します。

cookieに保存された値を表示させる

CookieController.java
@GetMapping("/get") 
    @ResponseBody
    public String getCookie(@CookieValue("test_cookie") Cookie cookie) {
        // cookieの値を取得します
        return "cookieに保存された値は: " + cookie.getValue();
    }

値を取得する

@CookieValueを付けたCookieクラスのオブジェクトをcookie名を指定して引数に指定することでcookieを取得できます。
例ではCookieクラスのオブジェクトを代入している変数をcookieという名称にしていますが、例えばcookieValueという名称でも問題ありません

public String メソッド名(@CookieValue("cookie名") Cookie cookie) {
    // 処理
}

さらにgetValue()メソッドを呼び出すことでcookieの値を取得できます。

cookie.getValue();

cookieの有効期限を残り0秒に設定して削除する

cookieは残存期間を秒数で指定することができ、残存期間を0に指定することで、Cookieを削除することができます。

CookieController.java
@GetMapping("/delete")
    @ResponseBody
    public String deleteCookie(@CookieValue("test_cookie") Cookie cookie, HttpServletResponse res) {
        cookie.setMaxAge(0);
        res.addCookie(cookie);
        return "削除しました";
    }

cookieの有効期限を設定する 

cookieの残存期間を残り0秒に設定することでcookieを削除できますが、addCookieで情報を上書きするようにブラウザへ命令しなければ削除されずcookieは残り続けます

public String メソッド名(@CookieValue("cookie名") Cookie cookie) {
    cookie.setMaxAge(0); // 有効期限を残り0秒に設定するための情報を作る
    res.addCookie(cookie); // 新しい有効期限をクライアント(ブラウザ)に送信する
}

cookieを削除した後にもう一度cookieの値を出力しようとするとエラーが発生します

スクリーンショット 2023-06-27 18.36.15.png

あとがき

ブラウジングをしているとcookieという単語はよく目にしていました。一時データ・・・という言葉は認識はしていましたが、それ以上のことはわかっていませんでした。cookieとはテキストデータのことで前回にブラウジングした時の、例えば買い物カゴだとか、動画の視聴履歴だとか、そういった情報がテキストにメモとして残されているのだなと、今回の操作方法学習で少し理解しました

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?