HttpSession을 이용하여 로그인, 로그아웃 처리를 구현 해보았다.
HttpSession을 사용하면 기존에 구현했던 로그인 로그아웃 처리를 더욱 쉽게 구현 가능하다.
서블릿을 통해 HttpSession을 생성하면 쿠키가 생성된다. 이때 쿠키의 이름은 JSESSIONID이고, 값은 추정 불가능한 랜덤값이 부여된다.
코드
public interface SessionConst {
String LOGIN_MEMBER = "loginMember";
}
HttpSession에 데이터를 보관하고 조회할때 같은 이름이 중복되어 사용되므로 인터페이스를 활용하여 상수 정의
<로그인 처리>
@PostMapping("/login")
public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult
bindingResult, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(),form.getPassword());
log.info("login? {}", loginMember);
if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
//로그인 성공 처리
//세션이 있으면 세션 반환, 없으면 신규 세션 생성
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 보관
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);
return "redirect:/";
}
getSession을 이용해 세션이 있으면 세션을 반환하고 없으면 신규 세션을 생성한다.
HttpSession session = request.getSession();
로그인이 성공적으로 이루어질때 키(loginMember)와 회원 객체를 세션에 저장한다.
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);
<로그아웃 처리>
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session!=null){
session.invalidate();
}
return "redirect:/";
}
HttpSession session = request.getSession(false);
위 코드는 세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성하지 않는다. ` null` 을 반환한다
session.invalidate();
위 코드를 통해 세션을 제거 해주면 로그아웃이 처리된다.
<홈화면 처리>
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model){
HttpSession session = request.getSession(false);
if(session==null){
return "home";
}
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
//세션에 회원 데이터가 없으면 home
if(loginMember==null){
return "home";
}
//세션이 유지되면 로그인홈으로 이동
model.addAttribute("member",loginMember);
return "loginHome";
}
getSession(false)를 통해 세션을 받아오고
session이 null값이면 로그인이 안된 홈화면으로 이동하고 세션에 회원 객체가 있으면 loginMember를 model에 담아 로그인이 된 홈 화면으로 이동한다.
@SessionAttribute
@SessionAttribute를 이용하면 세션을 더욱 편리하게 사용 가능하다.
@GetMapping("/")
public String homeLoginV3Spring(
@SessionAttribute(name=SessionConst.LOGIN_MEMBER,required = false)Member loginMember,
Model model){
//세션에 회원 데이터가 없으면 home
if(loginMember==null){
return "home";
}
//세션이 유지되면 로그인홈으로 이동
model.addAttribute("member",loginMember);
return "loginHome";
}
여기서 홈화면에 세션이 없이 접속하는 유저가 있을 수 있으므로 required는 false로 설정해준다.
@SessionAttribute(name=SessionConst.LOGIN_MEMBER,required = false)Member loginMember
세션 타임아웃 설정
application.properties에 아래 코드를 삽입 해주면 된다.
server.servlet.session.timeout=60
기본값 : 1800초(30분)
60이하의 값은 설정 불가하다.
'BackEnd > 스프링 MVC' 카테고리의 다른 글
스프링 인터셉터 - 인증 체크 (0) | 2025.01.05 |
---|---|
서블릿 필터 - 인증 체크 (0) | 2025.01.04 |
로그인 처리 - 세션 직접 만들어 보기 (1) | 2024.12.30 |
로그인 처리하기 - 쿠키 사용 (0) | 2024.12.30 |
HTTP 요청 메시지 - JSON (0) | 2024.02.28 |