로그인 정보를 쿠키에 담아서 보관하기

2024. 10. 15. 16:37·스프링
@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
    return "login/loginForm";
}

@PostMapping("/login")
public String login(@Validated @ModelAttribute("loginForm") LoginForm form, BindingResult bindingResult, HttpServletResponse response) {
    if (bindingResult.hasErrors()) {
        return "login/loginForm";
    }

    Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

    if (loginMember == null) {
        bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
        return "login/loginForm";
    }

    // 로그인 성공 처리
    Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getLoginId()));
    response.addCookie(idCookie);

    return "redirect:/";
}

- 밑에 부분의 Cookie 객체를 생성한 것이 핵심!

- 생성 후 HttpServletResponse 에 담아서 반환함

 

@GetMapping("/")
public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) {
    if (memberId == null) {
        return "home";
    }

    // 로그인
    Member loginMember = memberRepository.findById(memberId);
    if (loginMember == null) {
        return "home";
    }
    model.addAttribute("member", loginMember);
    return "loginHome";
}

- @CookieValue 로 쿠키 조회

- 로그인하지 않아도 홈화면에 접근할 수 있게 required를 false로 설정

 

loginHome.html

<h4 class="mb-3" th:text="|로그인: ${member.name}|">로그인 사용자 이름</h4>

- th:text="|로그인: ${member.name}|" : 로그인에 성공한 사용자 이름을 출력한다.

 

로그아웃 기능
이번에는 로그아웃 기능을 만들어보자. 로그아웃 방법은 다음과 같다.
- 세션 쿠키이므로 웹 브라우저 종료시
- 서버에서 해당 쿠키의 종료 날짜를 0으로 지정

 

LoginController - logout 기능 추가

@PostMapping("/logout")
public String logout(HttpServletResponse response) {
    expireCookie(response, "memberId");
    return "redirect:/";
}

private static void expireCookie(HttpServletResponse response, String cookieName) {
    Cookie cookie = new Cookie(cookieName, null);
    cookie.setMaxAge(0);
    response.addCookie(cookie);
}

 

'스프링' 카테고리의 다른 글

동시성 문제와 ThreadLocal  (0) 2025.04.23
리액트<>스프링 부트 - 구글 로그인 CORS 에러 해결  (0) 2025.03.17
스프링 입문 정리  (0) 2024.08.20
스프링 입문 (8) - AOP  (0) 2024.03.18
스프링 입문 (7) - DB 접근 기술  (0) 2024.03.18
'스프링' 카테고리의 다른 글
  • 동시성 문제와 ThreadLocal
  • 리액트<>스프링 부트 - 구글 로그인 CORS 에러 해결
  • 스프링 입문 정리
  • 스프링 입문 (8) - AOP
효재감자
효재감자
  • 효재감자
    효재감자의 우당탕탕 개발일지
    효재감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 아무거나 (3)
      • 백준 (44)
      • 알고리즘 (4)
      • 자바 (1)
      • 리눅스(우분투) 및 클라우드 (2)
      • 스프링 (14)
        • 스프링 시큐리티 인 액션 (도서 정리) (5)
      • 플러터(Dart) (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
효재감자
로그인 정보를 쿠키에 담아서 보관하기
상단으로

티스토리툴바