Spring
로그인 처리1 - 쿠키, 세션 : 로그인 처리하기 - 세션 직접 만들기
sami355
2022. 9. 12. 21:49
인프런 영한님의 스프링 mvc2편을 보고 정리한 글입니다.
무엇을 배웠나요?
- 세션 관리는 크케 3가지 기능을 제공한다.
- 세션 생성
- sessionID생성(추정 불가능한 랜덤 값)
- 세션 저장소에 sessionID와 보관할 값 저장
- sessionID로 응답 쿠키를 생성해서 클랑이언트에 전달
- 세션 조회
- 클라이언트가 요청한 sessionID 쿠키의 값으로, 세션 저장소에 보관할 값 조회
- 세션 만료
- 클라이언트가 요청한 sessionID 쿠키의 갑으로, 세셩 저장소에 보관한 sessionID와 값 제거
- 세션 생성
- 추가로 HttpServletResponse , HttpServletRequest 을 테스트 할때는 객체를 직접 사용할 수 없기에 비슷한 역할을 해주는 가짜 MockHttpServletRequest MockHttpServletResponse 를 사용하면 된다.
- 세션 관리자에서 저장된 회원정보를 조회하고 만약 회원 정보가 없으면 쿠키나 세션이 없는 것 이므로 로그인 되지 않은 것으로 처리한다.
- 세션이라는 것은 뭔가 특별한 것이 아니라 단치 쿠키를 사용하는데, 서버에서 데이터를 유지하는 방법일 뿐이라는 것을 이해했을 것이다.
코드
@GetMapping("/")
public String homeLoginV2(HttpServletRequest request, Model model) {
//세션 관리자에 저장된 회원 정보 조회
Member member = (Member)sessionManager.getSession(request);
if (member == null) {
return "home";
}
//로그인
model.addAttribute("member", member);
return "loginHome";
}
@PostMapping("/login")
public String loginV2(@Valid @ModelAttribute LoginForm form, BindingResult
bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(),
form.getPassword());
log.info("login? {}", loginMember);
if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
//로그인 성공 처리
//세션 관리자를 통해 세션을 생성하고, 회원 데이터 보관
sessionManager.createSession(loginMember, response);
return "redirect:/";
}