Cookie와 로그아웃 구현
먼저 로그인 상태를 유지하기 위해 쿠키를 사용할 수 있다.
서버에 로그인하면 HTTP 응답에 쿠키를 담아 브라우저에 전달해주면 브라우저는 앞으로 해당 쿠키를 지속해서 보내주게 된다.
시작하기 전에 쿠키의 종류에 대해서도 알려줬다.
영속 쿠키와 세션 쿠키가 있다. 영속 쿠키는 만료 날짜를 입력하면 해당 날짜까지 유지되고 세션 쿠키는 만료 날짜를 생략하면 브라우저 종료시 까지만 유지가 된다.
브라우저 종료시 로그아웃이 되는 것을 바란다면 세션 쿠키를 사용하면 된다.
Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId()));
response.addCookie(idCookie);
return "redirect:/";
}
로그인에 성공하면 쿠키를 생성해 준다.
이때 쿠키에 시간 정보를 주지 않으면 세션 쿠키로 설정이 된다.
세션 쿠키는 브라우저가 종료되면 모두 종료되는 쿠키이다.
@GetMapping("/")
public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) {
홈에는 required false로 쿠키 값이 없는 사람도 들어올 수 있게 한다.
@CookieValue를 통해 쿠키를 좀 더 편하게 조회할 수 있다.
요약하면 쿠키 값이 있던 없던 홈으로 접근이 가능하지만 로그인 쿠키가 있는 사용자는 로그인을 하게 되면 사용자 전용 홈(loginHome)으로 보내주고 홈 화면에 회원 관련 정보도 출력해야 하기 때문에 member 데이터도 모델에 담아 전달해 주는 것이라고 한다.
th:text="|로그인: ${member.name}|"
타임리프는 위 문법을 통해 로그인에 성공한 사용자 이름을 출력할 수 있다.
이렇게 세션 쿠키로 만든 로그인을 바탕으로 로그아웃 기능도 만들었다.
먼저 생각해 봐야 하는게 세션 쿠키를 어떻게 종료시킬까인데 서버에서 해당 쿠키의 종료 날짜를 0으로 지정하면 된다.
@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);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
로그아웃 기능을 추가한 것이다.
cookie.setMaxAge(0)으로 값을 주었다.
이렇게 로그아웃까지 구현했는데 이렇게 구현하면 보안상 문제가 생겨 큰일난다고 한다. 아마 강의를 계속 진행하면서 점차 이 부분을 업그레이드 시켜나가지 않을까싶다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : Session 직접 만들기 (0) | 2022.02.18 |
---|---|
[Spring Boot] : Cookie 보안 문제와 대처 방안 (0) | 2022.02.18 |
[Spring Boot] : 로그인 기능 구현하기 (0) | 2022.02.17 |
[Spring Boot] : 회원 가입 기능 구현하기 (0) | 2022.02.17 |
[Spring Boot] : Bean Validation HTTP message Converter (0) | 2022.02.17 |
댓글