public interface SessionConst {
String LOGIN_MEMBER = "loginMember";
}
HttpSession에 데이터를 보관하고 조회할 때 같은 이름이 중복되어 사용되기 떄문에 상수를 하나 정의.
서블릿 http Session 사용코드로 변환
@PostMapping("/login")
public String loginV3(@Valid @ModelAttribute("loginForm")LoginForm loginForm, BindingResult bindingResult,
HttpServletRequest request){
if(bindingResult.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(loginForm.getLoginId(), loginForm.getPassword());
if(loginMember == null){
bindingResult.reject("loginFail","아이디 또는 비밀번호가 맞지않습니다.");
return "login/loginForm";
}
//로그인 성공 처리
//세션있으면 세션반환 ,없으면 신규 생성
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:/";
}
HomeLogin 부분도 HttpSession 사용으로 변경
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model){
HttpSession session = request.getSession(false);
if(session == null){
return "home";
}
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
model.addAttribute("member",loginMember);
//로그인 된 사용자 전용 홈
return "loginHome";
}
@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";
}
jsessionid가 url에 있을때 404에러 - 인프런 (inflearn.com)
스프링에서 url 매핑 전략이 변경되어서 문제가 발생한것
server:
servlet:
session:
tracking-modes: cookie
yml파일인 경우 현재와 같이 설정을 해줘야한다.