publicvoidcreateSession(Object value, HttpServletResponse response){ // Session id를 상성하고 값을 Session에 저장 StringsessionId= UUID.randomUUID().toString(); // Session Store 에 새로운 Session 정보를 저장한다. // Session 은 Key Value 형태로 데이터를 저장 sessionStore.put(sessionId, value);
// 쿠키 생성 // Session Id 를 Cookie 에 넣어 전달한다. CookiemySessionCookie=newCookie(SESSION_COOKIE_NAME, sessionId); response.addCookie(mySessionCookie); }
public Object getSession(HttpServletRequest request){ // Request 에서 Session Id 를 가져온다. CookiesessionCookie= findCookie(request, SESSION_COOKIE_NAME); if(sessionCookie == null){ returnnull; }
// Session Store 에 저장된 Session 정보를 가져온다. return sessionStore.get(sessionCookie.getValue()); }
if(loginMember == null){ bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return"login/loginForm"; }
// 로그인 설공 처리 TODO // 쿠키 사용하기 // 쿠키에 시간 정보를 주지 않으면 세선 쿠(브라우저 종료시 모두 종료) Cookiecookie=newCookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(cookie);
return"redirect:/"; }
Test
classSessionManagerTest {
SessionManagersessionManager=newSessionManager();
@Test voidSessionTest(){ // 세션 생성 MockHttpServletResponseresponse=newMockHttpServletResponse(); Membermember=newMember(); sessionManager.createSession(member, response);
// 요청에 응답 쿠키 저장 MockHttpServletRequestrequest=newMockHttpServletRequest(); request.setCookies(response.getCookies());
if(loginMember == null){ bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return"login/loginForm"; }
// 로그인 설공 처리 TODO // 세션 관리자를 통해 세션을 생성하고, 회원 데이터 보관 // 쿠키에 시간 정보를 주지 않으면 세션 쿠키(브라주어 종료시 모두 종료) sessionManager.createSession(loginMember, response);
return"redirect:/"; }
@PostMapping("/logout") public String logoutV2(HttpServletRequest request){ sessionManager.expire(request); return"redirect:/"; }
@GetMapping("/") public String homeLoginV2(HttpServletRequest request, Model model){ // 세션 관리자에 저장된 회원 정보를 조회 Membermember= (Member) sessionManager.getSession(request);