@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model)
{
// 로그인 안 한 사용자(세션id가 없는 사용자)도 홈 화면에 들어 올 수가 있어야 한다
// -> 고로, request.getSession()를 false로 하여 신규 세션이 생성되지 않도록 하여야 한다.
HttpSession session = request.getSession(false);
if(session == null)
return "home";
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
if(loginMember == null)
return "home";
// 세션이 유지되면 로그인으로 이동동
model.addAttribute("member",loginMember);
return "loginHome";
}
HttpServletRequest은 getSession() 사용시 기본값이 true이다.
즉, getSession(true)일 때 요청 HTTP 헤더에 sessionId가 없으면 신규로 자동 생성을 해준다.
@GetMapping("/")
public String homeLoginV3Spring(@SessionAttribute(name=SessionConst.LOGIN_MEMBER,required = false) Member loginMember, Model model)
{
if(loginMember == null)
return "home";
// 세션이 유지되면 로그인으로 이동동
model.addAttribute("member",loginMember);
return "loginHome";
}
그러나 스프링이 제공하는 @SessionAttribute는 요청 Http 헤더에 sessionId가 없어도 자동 생성을 해주지 않는다.
@SessionAttribute는 요청 Http 헤더에 sessionId가 있는 경우에만 사용을 하여야 한다는 점에 주의하자
/**
* 로그인 성공 처리
*/
// Http 요청에 기존 세션(sessionId) 반환, 없으면 신규 세션(sessionId) 생성
// -> 이 메서드는 최초 로그인할 때 호출되는 것이니 당연히 세션이 없다.
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember); // 세션(sessionId)에 대한 객체(LoginForm) 저장!
사용자가 로그인을 하였을 때 실행되는 컨트롤러 로직이다.
request.getSession()은 신규 세션을 만들어서 그 SessionId를 session 변수가 가지고 있다.
'Springあるある' 카테고리의 다른 글
Logback MDC(Feat. LogFilter,Filter) (0) | 2025.01.16 |
---|---|
서블릿 필터의 사용 예시(Feat. Filter) (0) | 2025.01.16 |
Mock 객체(Feat. Cookie,Session, Mock 객체) (0) | 2025.01.16 |
도메인의 진짜 의미! (0) | 2025.01.15 |
[@RequestParam,@ModelAttribute] VS @ResponeBody(Feat.HttpMessageConverter) (0) | 2025.01.15 |