【Spring Boot】Springでセッションにデータを保存する方法

spring boot

Spring Bootでは、セッションにデータを保存する方法はいくつかあります。以下に、代表的な方法としてHttpSession@SessionAttributes、および@SessionScopedを紹介します。

1. HttpSessionを使用する方法:HttpSessionは、サーブレットAPIを介してセッション管理を提供します。以下は、Spring BootでHttpSessionを使用してセッションにデータを保存する簡単な例です。

import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/example")
public class ExampleController {

    @GetMapping("/setSessionData")
    public String setSessionData(HttpSession session) {
        // セッションにデータを保存
        session.setAttribute("key", "value");
        return "Data set in session";
    }

    @GetMapping("/getSessionData")
    public String getSessionData(HttpSession session) {
        // セッションからデータを取得
        String value = (String) session.getAttribute("key");
        return "Data from session: " + value;
    }
}

2. @SessionAttributesを使用する方法:

@SessionAttributesアノテーションを使用して、特定のコントローラー内でセッション属性を指定することができます。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/example")
@SessionAttributes("myData")
public class ExampleController {

    @ModelAttribute("myData")
    public String setupData() {
        return "value";
    }

    @GetMapping("/getSessionData")
    public String getSessionData(Model model) {
        // セッションからデータを取得
        String value = (String) model.getAttribute("myData");
        return "Data from session: " + value;
    }
}

3. @SessionScopedを使用する方法:

@SessionScopedアノテーションを使用して、Springの@Component@Serviceなどの管理されたBeanをセッションスコープに配置することができます。

import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SessionScopedBean {
    private String data;

    // getterとsetterメソッド

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

これを使用するコントローラー:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/example")
public class ExampleController {

    @Autowired
    private SessionScopedBean sessionScopedBean;

    @GetMapping("/setSessionData")
    public String setSessionData() {
        // セッションScopedのBeanにデータを保存
        sessionScopedBean.setData("value");
        return "Data set in session";
    }

    @GetMapping("/getSessionData")
    public String getSessionData() {
        // セッションScopedのBeanからデータを取得
        String value = sessionScopedBean.getData();
        return "Data from session: " + value;
    }
}
タイトルとURLをコピーしました