인프런 커뮤니티 질문&답변
[Spring] 스프링 세션이 만료가 되면 localStorage에 저장한 값들도 같이 제거됩니다 도와주세요ㅜㅜ
작성
·
577
0
현재 로그인 유지 체크 여부에 따라 로그인 기능 유지 기능을 구현하고 있습니다.
클리이언트 단에서 localStorage를 이용해 이메일과 패스워드, 로그인 유지 체크 여부를 저장하여
서버(스프링 레거시 기반)에 로그인 세션 만료 후에도 자동으로 로그인이 유지하도록 했습니다.
그런데 로그인 세션이 만료되면 localStorage에 설정했던 값들도 같이 초기화 되어버리는 현상을 발생합니다ㅜㅜ
localStorage는 클라이언트에 데이터를 저장할 수 있도록 지원하는 web storage 기능으로 알고 있는데, 서버의 세션 만료가 클라이언트 단에 영향이 가는 걸까요?
- header_menu.jsp
: 화면에 고정되는 jsp로, 어느 화면으로 접속하든지 간에 아래 스크립트가 동작하여 재 로그인을 하도록 구현했습니다.
<nav class="navbar navbar-expand-md bg-dark navbar-dark fixed-top shadow-lg"> <a class="navbar-brand" href="${root }main">Easyvvon</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navMenu"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navMenu"> <c:if test="${loginUserBean.user_login != false }"> <ul class="navbar-nav"> <c:forEach var="vo" items="${headerMenuList }"> <li class="nav-item"> <a href="${root }board/main?$board_info_idx=${vo.id }" class="nav-link">${vo.category_name }</a> </li> </c:forEach> </ul> </c:if> <ul class="navbar-nav ml-auto"> <c:choose> <c:when test="${loginUserBean.user_login != true }"> <li class="nav-item"> <a href="${root }user/login" class="nav-link">로그인</a> </li> <li class="nav-item"> <a href="${root }user/join" class="nav-link">회원가입</a> </li> </c:when> <c:otherwise> <li class="nav-item"> <a href="${root }user/modify" class="nav-link">정보수정</a> </li> <li class="nav-item"> <a href="${root }user/logout" class="nav-link">로그아웃</a> </li> </c:otherwise> </c:choose> </ul> <input id="login_status" type="hidden" value="${loginUserBean.user_login }"> </div> </nav> <script>window.onload = function() {// 페이지 무한 reload 방지,// 로그인 상태(loginCheck)가 null이면 'false', 로그인 중이면 'true'var login_status = $("#login_status").val();var keep_login_check = localStorage.getItem("keep_login");var keep_login_email = localStorage.getItem('keep_login_email');var keep_login_pw = localStorage.getItem('keep_login_pw');if(login_status == "false" && keep_login_check == "true"&& (keep_login_email != null & keep_login_pw != null)) {var params = {user_email : keep_login_email,user_pw : keep_login_pw};$.ajax({type: "POST",url : "${root }user/doLoginAjax",data: params,dataType: "text",success : function(result){if (result.trim() == "true") {location.reload();} else {//localStroage 전체 삭제localStorage.clear();location.reload();} } });}} </script>
- root-context.xml
<bean id="loginUserBean" class="com.easyvvon.steveleejava.model.vo.UserVO" scope="session" />
- UserVO.java
: 로그인 세션 역할 Bean을 설정하고, 위 header_menu.jsp 코드의 input hidden(빨간표시)에 로그인 상태 값을 나타내도록 구현했습니다.
- UserController.java
@Resource(name = "loginUserBean")
@Lazy
private UserVO loginUserBean;
@PostMapping(value = "/user/doLoginAjax")
public String doLogin(@RequestParam(required = false) Map<String, Object> params,
UserVO tmpLoginUserBean,
Model model) {
tmpLoginUserBean.setUser_email(String.valueOf(params.get("user_email")));
tmpLoginUserBean.setUser_pw(String.valueOf(params.get("user_pw")));
userService.doLogin(tmpLoginUserBean);
if(!loginUserBean.isUser_login()) {
return false + "";
}
return true + "";
}
- UserService.java
@Resource(name = "loginUserBean")
@Lazy
private UserVO loginUserBean;
@Override
public void doLogin(UserVO tmpLoginUserBean) {
UserVO resultUserVO = userDAO.doLogin(tmpLoginUserBean);
if(resultUserVO != null) {
loginUserBean.setId(resultUserVO.getId());
loginUserBean.setUser_email(resultUserVO.getUser_email());
loginUserBean.setUser_login(true);
}
}
제발 도와주세요 ㅜㅜ
답변
답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!




