항상 그렇지만 비슷한 거라도 조금이라도 다르면 머릿속에서 매치하기란 힘든거 같다...
Session & Cookie
@PostMapping("/login")
public String login(
@Valid @ModelAttribute LoginRequestDto request,
HttpServletResponse response // 쿠키값 세팅에 필요
) {
// 로그인 유저 조회
LoginResponseDto responseDto = userService.login(request.getUserName(), request.getPassword());
if (responseDto.getId() == null) {
// 로그인 실패 예외처리
return "login";
}
// 로그인 성공 처리
// 쿠키 생성, Value는 문자열로 변환하여야 한다.
Cookie cookie = new Cookie("userId", String.valueOf(responseDto.getId()));
// 쿠키에 값 세팅 (expire 시간을 주지 않으면 세션쿠키가 됨, 브라우저 종료시 로그아웃)
// Response Set-Cookie: userId=1 형태로 전달된다.
response.addCookie(cookie);
// home 페이지로 리다이렉트
return "redirect:/home";
}
조금 더 사용하는 부분으로 보게 되면 home으로 이동하는 mapping 함수를 보면 된다.
@GetMapping("/home")
public String home(
// @CookieValue(required = true) 로 필수값(default) 설정
// required = false 이면 필수값 아님.
@CookieValue(name = "userId", required = false) Long userId, // String->Long 자동 타입컨버팅
Model model
)
클라이언트 측에서 들어오는 값들 중 @CookieValue 어노테이션으로 설정 해주면 자동 반환된다.
물론 이렇게 심플하게 사용할 거 같지는 않지만...
쿠키 사용 법과 사용 예제에 대해서 조금 더 알아보는 포스트는 추후에 만들어보겠다.
public interface Const {
String LOGIN_USER = "loginUser";
}
@PostMapping("/session-logout")
public String logout(HttpServletRequest request) {
// 로그인하지 않으면 HttpSession이 null로 반환된다.
HttpSession session = request.getSession(false);
// 세션이 존재하면 -> 로그인이 된 경우
if(session != null) {
session.invalidate(); // 해당 세션(데이터)을 삭제한다.
}
return "redirect:/session-home";
}
request.getSession(false);
위의 부분의 파라미터 bool 값은
