Free Lines Arrow
본문 바로가기
Spring/spring mvc 2 스터디

[Spring] 로그인 처리 쿠키

by skahn1215 2022. 4. 16.
728x90
반응형

쿠키를 사용하여 로그인 처리

쿠키의 종류

  • 영속 쿠키: 만료 날짜를 입력 하면 해달 날짜 까지 유지
  • 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지

 

쿠키 생성 과정

  • 1. 로그인 시도
  • 2. 로그인 성공시 DB 에서 MemberId 로 쿠키를 생성
  • 3. 쿠키를 Header 에 포함시켜 response 를 준다.
  • 4. 브라우저 쿠키 저장소에 쿠키가 저장된다.

 

쿠키생성 후 처리과정

1. 저장된 쿠키 조회후 요청시 쿠키를 담아 서버에 요청

2. 해당 정보를 가지고 DB 조회

3. 응답.

 

 

쿠키를 이용한 로그인  로직

@PostMapping("/login")
  public String login(@Valid @ModelAttribute LoginForm form, BindingResult
  bindingResult, HttpServletResponse response) {

   
   Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
      log.info("login? {}", loginMember);
      if (loginMember == null) {
          bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
          return "login/loginForm";
      }
   
  // 쿠키 생성 로직
  Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId()));
  
  // 응답에 쿠키 추가
  response.addCookie(idCookie);
  return "redirect:/";
}

 

로그아웃

@PostMapping("/logout")
  public String logout(HttpServletResponse response) {
      expireCookie(response, "memberId");
      return "redirect:/";
  }
  
  private void expireCookie(HttpServletResponse response, String cookieName) {
  
      Cookie cookie = new Cookie(cookieName, null);
      // 0 으로 셋팅하여 소멸시킨다.
      cookie.setMaxAge(0);
      response.addCookie(cookie);
}

 

 

쿠키의 보안 문제

  • 쿠키 값은 임의로 변경가능 하다
    그렇기 때문에 쿠키를 이해하고 알면 사용자의 데이터를 추적할수 있다.
  • 쿠키의 보관된 정보는 노출이 된다.
  • 쿠키를 훔쳐간다면 악의적인 요청도 가능하다

 

대안

  • 쿠키 값을 암호화 하거나 임의값을 넣는다.
  • 만료시간을 지정한다.

 

 

 

 

참고:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/lecture/83355?tab=curriculum 

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

'Spring > spring mvc 2 스터디' 카테고리의 다른 글

[Spring] Filter  (0) 2022.05.31
[Spring] 로그인 처리 세션  (0) 2022.05.25
[Spring] Validation: Validator  (0) 2022.02.02
[Spring] Validation: 오류코드, 메시지 처리  (0) 2022.02.01
[Spring] Validation: BindingResult  (0) 2022.02.01

댓글