@PostMapping("/login")
public String loginV3(@Validated @ModelAttribute("loginForm") LoginForm form, BindingResult bindingResult, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
if(loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
// 로그인 성공 처리 TODO
// 세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성
HttpSession session = request.getSession();
// 세션에 로그인 회원정보를 보관
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);
return "redirect:/";
}
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session!=null) {
session.invalidate();
}
return "redirect:/";
}
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model) {
// 기본값 false로 해야함
HttpSession session = request.getSession(false);
// 로그인
if (session == null) {
return "home";
}
Member member = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
if (member == null) {
return "home";
}
model.addAttribute("member", member);
return "loginHome";
}
true는 세션이 있으면 기존 세션을 반환하고 세션이 없으면 새로운 세션을 생성해서 반환한다.
false는 세션이 있으면 기존 세션을 반환하고 세션이 없으면 새로운 세션을 생성하지 않고 null을 반환한다.
@GetMapping("/")
public String homeLoginV3Spring(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member member, Model model) {
if (member == null) {
return "home";
}
model.addAttribute("member", member);
return "loginHome";
}
application.properties에 server.servlet.session.tracking-modes=cookie를 추가해줘서 url에 세션id가 붙는것을 없애주도록 한다.
application.properties에 server.servlet.session.timeout=1800를 추가해줘서 30분씩 유지하도록 하고 예민한 데이터들은 따로 타임아웃을 지정해주도록 한다.