1 분 소요

 인프런 스프링 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를 키, 랜덤 값을 밸류로 쿠키로 저장해 두고 있다.

로그아웃해도 쿠키는 따로 사라지지 않는데, 상관없다.

어차피 서버에서는 그 랜덤 값을 지워버렸다.

정리

이번 시간에는 세션과 쿠키의 개념을 명확하게 이해하기 위해서 직접 만들어 보았다.

사실 세션이라는 것이 뭔가 특별한 것이 아니라 쿠키를 사용하는데, 서버에서 데이터를 유지하는 방법일 뿐이라는 것을 이해했다.

댓글남기기