스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - (35) 로그인 처리 - 쿠키 세션 - 직접 만든 세션 적용하기
인프런 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술편을 학습하고 정리한 내용 입니다.
로그인 처리 - 직접 만든 세션 적용
앞서 만든 세션 을 사용해서 로그인 처리를 해보자.
LoginController
1
private final SessionManager sessionManager;
먼저 sessionManager를 선언한다.
loginV2()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@PostMapping("/login")
public String loginV2(@Validated @ModelAttribute("loginForm") LoginForm form, BindingResult result, HttpServletResponse response) {
if (result.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
if (loginMember == null) {
result.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
// 로그인 성공 처리
// 세션 관리자를 통해 세션을 생성하고, 회원 데이터 보관
sessionManager.createSession(loginMember, response);
return "redirect:/";
}
로그인 성공 시 세션을 등록한다. 세션에 loginMember를 저장해두고, 쿠키도 함께 발행한다.
logoutV2()
1
2
3
4
5
@PostMapping("/logout")
public String logoutV2(HttpServletRequest request) {
sessionManager.expire(request);
return "redirect:/";
}
로그 아웃 시 세션의 정보를 제거한다.
HomeController
1
private final SessionManager sessionManager;
여기도 마찬가지로 의존성 주입
homeLoginV2()
1
2
3
4
5
6
7
8
9
10
11
12
13
@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";
}
세션 관리자에서 저장된 회원 정보를 조회한다. 만약 회원 정보가 없으면, 쿠키나 세션이 없는 것 이므로 로그인 되지 않은 것으로 처리한다.

실제 로그인 시 mySessionId를 키, 랜덤 값을 밸류로 쿠키로 저장해 두고 있다.
로그아웃해도 쿠키는 따로 사라지지 않는데, 상관없다.
어차피 서버에서는 그 랜덤 값을 지워버렸다.
정리
이번 시간에는 세션과 쿠키의 개념을 명확하게 이해하기 위해서 직접 만들어 보았다.
사실 세션이라는 것이 뭔가 특별한 것이 아니라 쿠키를 사용하는데, 서버에서 데이터를 유지하는 방법일 뿐이라는 것을 이해했다.
댓글남기기