HttpServletRequest.getSession(default == true)
- request.getSession(true) : 세션이 있으면 기존 세션 반환
세션이 없으면 새로운 세션을 생성해서 반환
- request.getSession(false) : 세션이 있으면 기존 세션 반환
: 세션이 없으면 null을 반환
- 기존 세션의 여부는 JSESSIONID로 구분합니다. session저장소에 JSESSIONID와 매칭되는 세션이 존재하는지!
* JSESSIONID : 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키.
로그인 구현
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/")
public String home(HttpServletRequest request, Model model) {
HttpSession session = request.getSession(false);
// 세션이 존재한다면 세션에 저장되있는 member조회
if(session == null) { // 아직 인증 X
return "login";
}
Member loginMember = (Member) session.getAttribute("LOGIN_MEMBER");
model.addAttribute("member", loginMember);
return "home";
}
@PostMapping("/login")
public String login(@ModelAttribute MemberDto memberDto, HttpServletRequest request){
Member loginMember = memberService.login(memberDto);
if(loginMember == null) // 로그인 실패
return "redirect:/"; // 세션없이 홈으로 이동 -> 로그인 페이지 이동
HttpSession session = request.getSession();
session.setAttribute("LOGIN_MEMBER", loginMember);
return "redirect:/"; // 세션이 존재하므로 home으로 이동
}
@PostMapping("logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session != null) // 세션이 존재한다면
session.invalidate(); // 세션 만료
return "redirect:/";
}
}
- 이전 게시글에서 직접 SessionManager를 구현했을 때는 session생성 후 sessionId에 대한 쿠키를 response에 심어주었는데 이 과정을 request.getSession()의 내부로직에서 수행합니다.
'Spring' 카테고리의 다른 글
Spring Security 모든 인증된 사용자의 세션 확인 (0) | 2023.05.26 |
---|---|
Session을 이용한 로그인1(직접 구현) (1) | 2023.05.20 |
세션고정 취약점 및 보호 정책 (0) | 2023.05.18 |
LAZY로딩 관련 정리(직렬화 오류, N+1문제) (0) | 2023.05.11 |
JWT인증 설정 시 SpringBootTest (0) | 2023.05.06 |