Spring boot Session 사용하기 2

목차

Spring boot Session 사용하기 2

  • request.getSession(true)
    • HttpSession 이 존재하면 HttpSession 을 반환하고 존재하지 않으면 새로운 Session 을 반환한다.
  • request.getSession(false)
    • HttpSession 이 존재하면 현재 HttpSession 을 반한하고 존재하지 않으면 null 을 반환한다.
@PostMapping("/login")
public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request){
log.info("Request Params : {}", form);

if(bindingResult.hasErrors()){
return "login/loginForm";
}

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

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

// 로그인 설공 처리 TODO
// 세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성
HttpSession session = request.getSession();
// 세션에 로그인 회원 정보를 보관
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

return "redirect:/";
}
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request){
HttpSession session = request.getSession(false);
if(session != null){
session.invalidate();
}
return "redirect:/";
}
@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";
}

스프링에서 지원하는 Session 기능 사용하기

@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";
}

Tracking Mode 끄기

@Slf4j
@RestController
public class SessionInfoController {

@GetMapping("/session-info")
public String sessionInfo(HttpServletRequest request){
HttpSession session = request.getSession(false);
if(session == null){
return "세션이 없습니다.";
}

session.getAttributeNames()
.asIterator()
.forEachRemaining(name -> log.info("session name = {}, value = {}", name, session.getAttribute(name)));

log.info("sessionId = {}", session.getId());
log.info("getMaxInactiveInterval = {}", session.getMaxInactiveInterval());
log.info("creationTime = {}", new Date(session.getCreationTime()));
log.info("lastAccessedTime = {}", new Date(session.getLastAccessedTime()));
log.info("isNew = {}", session.isNew());

return "세션 출력";
}
}

Session Timeout 설정하기

server.servlet.session.timeout=1800
session.setMaxInactiveInterval(1800); //1800초
Share