@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 |