스프링 웹 MVC-20.@SessionAttribute(핸들러 메소드)
핸들러 메소드 10부: @SessionAttribute
HTTP 세션에 들어있는 값 참조할 때 사용
- HttpSession을 사용할 때 비해 타입 컨버전을 자동으로 지원하기 때문에 조금 편리함.
- HTTP 세션에 데이터를 넣고 빼고 싶은 경우에는 HttpSession을 사용할 것.
@SessionAttributes와는 다르다.
- @SessionAttributes는 해당 컨트롤러 내에서만 동작.
- 즉, 해당 컨트롤러 안에서 다루는 특정 모델 객체를 세션에 넣고 공유할 때 사용.
- @SessionAttribute는 컨트롤러 밖(인터셉터 또는 필터 등)에서 만들어 준 세션 데이터에 접근할 때 사용한다.
@GetMapping("/events/list")
public String getEvents(Model model, @SessionAttribute LocalDateTime visitTime){
System.out.println(visitTime);
public class VisitTimeInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if(session.getAttribute("visitTime") == null){
session.setAttribute("visitTime", LocalDateTime.now());
}
return true;
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new VisitTimeInterceptor());
}
또는 이미 세션에 넣었으니 HttpSession로 꺼낼 수도 있다.
@GetMapping("/events/list")
public String getEvents(Model model, HttpSession httpSession){
LocalDateTime visitTime = (LocalDateTime) httpSession.getAttribute("visitTime");
System.out.println(visitTime);