스프링 웹 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);






© 2019. by jaeuk