스프링 레디스 세션 사용법
세션 속성 설정하기
- 컨트롤러 메서드에 있는
HttpServletRequest 에서 HttpSession 을 얻어올 수 있다.
- 얻어온 뒤에는
setAttribute() 메서드를 통해 세션을 설정해주면 된다.
- 혹은 그냥 파라미터에
HttpSession 타입을 넣어두면, 스프링에서 알아서 주입해준다.
@PostMapping("/login")
public String loginUser(@ModelAttribute User user, HttpServletRequest request) {
// ... (Authentication logic)
// If authentication is successful, store user information in the session
HttpSession session = request.getSession();
session.setAttribute("user", user);
return "redirect:/dashboard";
}
@PostMapping("/login")
public String loginUser(@ModelAttribute User user, HttpServletRequest request, HttpSession session) {
// ... (Authentication logic)
// If authentication is successful, store user information in the session
session.setAttribute("user", user);
return "redirect:/dashboard";
}
세션 값 받아오기
- 설정할 때와 동일하게
HttpServletRequest 에서 getSession() 메서드를 통해 HttpSession 을 얻어올 수 있다.
- 스프링 컨트롤러 파라미터에서
@SessionAttribute 애노테이션을 통해 가져올 수도 있다. @SessionAttribute("sessionKey") Object key 와 같은 형식으로 가져오면 된다.
/**
* @SessionAttribute 사용하지 않는 버전
*/
@GetMapping("/dashboard")
public String dashboard(Model model, HttpServletRequest request) {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if (user != null) {
model.addAttribute("user", user);
return "dashboard";
} else {
return "redirect:/login";
}
}
@SessionAttribute 를 이용하면 더 짧고 명확하게 가져올 수 있다.
/**
* @SessionAttribute 사용한 버전
*/
@GetMapping("/dashboard")
public String dashboard(@SessionAttribute("user") User user, Model model, HttpServletRequest request) {
if (user != null) {
model.addAttribute("user", user);
return "dashboard";
} else {
return "redirect:/login";
}
}
세션 값 지우기
- 세션 값을 지우는 것도 가능하다.
- 세션 값 하나하나도 레디스의 메모리를 차지하므로 더이상 쓰지 않는다면 지워주는 것이 좋다.
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "redirect:/login";
}
세션 만료시키기 (혹은 무효화하기, invalidate)
- 로그아웃 등의 프로세스에 자주 사용되는 세션 만료시키기이다.
- 세션을 만료시키면 해당 세션은 레디스에서 지워진다.
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
session.invalidate();
return "redirect:/login";
}
스프링 레디스 세션 동작방식과 적용법