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;
}
}