@SessionAttribute
스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute을 지원합니다.
이미 로그인된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 참고로 이 기능은 세션을 생성하지 않습니다.
@SessionAttribute(name = "loginMember", required = false) Member loginMember
@GetMapping("/")
public String homeLogin(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember,
Model model) {
// 세션에 회원 데이터가 없으면 home
if (loginMember == null) {
return "home";
}
// 세션이 유지되면 로그인으로 이동
model.addAttribute("member", loginMember);
return "loginHome";
}
세션을 찾고, 세션에 들어있는 데이터를 찾는 번거로운 과정을 스프링이 한 번에 편리하게 처리해주는 것을 알 수 있습니다.
다음은 @SessionAttribute을 사용하지 않은 경우 세션을 찾고, 세션에 있는 데이터를 찾는 과정입니다.
@GetMapping("/")
public String homeLogin(HttpServletRequest request, Model model) {
// 세션이 없으면 home
HttpSession session = request.getSession(false);
if (session == null) {
return "home";
}
Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
// 세션에 회원 데이터가 없으면 home
if (loginMember == null) {
return "home";
}
// 세션에 회원 데이터가 있으면 로그인한 유저를 위한 홈 화면으로 이동
model.addAttribute("member", loginMember);
return "loginHome";
}
TrackingModes
로그인을 처음 시도하면 URL이 다음과 같이 jsessionid를 포함하고 있는 것을 확인할 수 있습니다.
- 이것은 웹 브라우저가 쿠키를 지원하지 않을 때 쿠키 대신 URL을 통해서 세션을 유지하는 방법입니다. 이 방법을 사용하려면 URL에 이 값을 계속 포함해서 전달해야 합니다.
- URL 전달 방식을 끄고 항상 쿠키를 통해서만 세션을 유지하고 싶으면 다음 옵션을 넣어주면 됩니다. 이렇게 하면 URL에 jsessionid 가 노출되지 않습니다.
application.properties
server.servlet.session.tracking-modes=cookie
'스프링 > Spring' 카테고리의 다른 글
컨버전 서비스 사용하기 - ConversionService (타임리프, 폼) (0) | 2021.12.30 |
---|---|
스프링 타입 컨버터 - Converter (0) | 2021.12.30 |
[SpringBoot] 서블릿의 HttpSession을 사용해 세션 구현하기 (0) | 2021.10.26 |
[SpringBoot] 스프링부트에서 비동기 처리하기 (0) | 2021.10.25 |
[SpringBoot] 스프링부트에서 스케쥴러 사용하기 (0) | 2021.10.24 |