studyplan

스프링부트 로그인 만들기 ! 3. HttpSession session 을 통한 로그인 유지 !!cookie를 사용한 자동로그인! 본문

스프링

스프링부트 로그인 만들기 ! 3. HttpSession session 을 통한 로그인 유지 !!cookie를 사용한 자동로그인!

무한머니 2022. 8. 5. 15:29

어제 인풋데이터를 가지고 로그인정보를 받아왔고 

 

그 정보를 가지고 

memberService.login 까지 가는걸 보았고 그 안에 세션의 생성을 보았다 ! 

들어올때부터 세션을 들고오고 

그 세션에 ! 

inputData 안에 들어있는 정보로 

Member foundMember = memberMapper.findUser(inputData.getAccount());

맴버를 찾아내고 / 그 맴버가있는지 없는지 검증을 한다 ! 그 정보로 로그인 한사람의 정보를 

session.setAttribute("loginUser", foundMember);

세션이라는 공간에 , 세팅하는데 "loginUser" 라는이름을 가진// 내가 찾은 맴버 foundMember 를 넣어준다 ! 

session.setMaxInactiveInterval(60 * 60); // 1시간

그리고 세션에대해 최대시간을 지정해 줌으로써 한시간동안 유지시켜주고 ! 

 

inputData 안에 자동로그인 정보를 가져오고 

keepLogin메소드를 실행시킨다 ! 메소드를 보자 

자동로그인엔!  쿠키가 필요한데 ! 

Cookie c = new Cookie(LOGIN_COOKIE, sessionId);

쿠키에 세션에 넣어뒀던 로그인 아이디를 넣어주고 ,

int limitTime = 60 * 60 * 24 * 90; // 90일에 대한 초
c.setMaxAge(limitTime);

쿠키의 제한시간을 걸어주고 

c.setPath("/"); // 전체경로

쿠키가 어디서 쓰일지 만들어준다 ! 

response.addCookie(c);
HttpServletResponse response

응답객체 response에 쿠키를 넣어주고 

dto 안에는 이런 값이 있는데 

계정정보 , 로그인한 아이디 , 제한시간 ! 필드로 이루어져있다 

 

DB에 내가 줬던 쿠키의 값을 넣어주는데 

 AutoLoginDTO();

자동로그인에대한 정보를 담은 객체에 

sessionId 를 넣어주고 

long nowTime = System.currentTimeMillis();

현재 날짜를 받아와서 

Date limitDate = new Date(nowTime + ((long) limitTime * 1000));
dto.setLimitTime(limitDate);

초단위 시간을 Date객체에 알맞게 변환시켜서 

자동로그인 객체에 값을 넣어준다 

 

이제 마지막으로 

dto에 계정정보를 담아서 

그 유저에 세션아이디와 , 제한시간을 업데이트시켜준다 ! 

 

이 과정이 끝나면 세션과,쿠키를 가지고 controller 에 가고 , DB에는 controller에 보낸값이 저장된다 ! 

Comments