본문 바로가기
CLASS/SERVLET

로그인 - 자동저장

by hingu 2024. 7. 3.
⚡ 자동로그인 체크시 localStorage 저장

로그인을 한 상황에서 해당 페이지를 강제로 url접속시 자동으로 메인페이지로 이동을 하는 상황을 재현

-login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
String mid = (String)hs.getAttribute("mid");
if(mid != null){
	//out.print("<script>location.href='http://nate.com';</script>");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<form id="frm_login" onsubmit="return logins()">
	<input type="text" name="mid"><br>
	<input type="password" name="mpass"><br><br>
	<input type="checkbox" name="autologin" value="Y">자동로그인
	<button>로그인</button>
</form>
</body>
<script>
function logins(){
	frm_login.method = "post";
	frm_login.action = "./loginok.do";
	if(frm_login.autologin.checked == true){
		if(confirm("pc방 및 공공장소에서는 자동로그인을 권장하지 않습니다.")){
			frm_login.submit();
		}else{
			return false;
		}
	}else{
		frm_login.submit();
	}
}

//자동로그인을 체크 후 해당 웹페이지 재접속
var id= localStorage.getItem("mid");
var pass= localStorage.getItem("mpass");
var ck= localStorage.getItem("autologin");
if(id!=null && pass!=null && ck!=null){
	frm_login.mid.value = id;
	var sp = pass.split("/");
	if(sp[1] == "auto"){
		frm_login.mpass.value = sp[0];
		frm_login.autologin.checked = true;
		frm_login.submit();
	}
}
</script>
</html>


button에 type이 없을 경우 submit
전송 방식은 get, SPA형태로 페이지가 이동됨


- loginok.java (servlet) login session 처리 및 storage 형태

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String mid = request.getParameter("mid");
    String mpass = request.getParameter("mpass");
    String autologin = request.getParameter("autologin");
    PrintWriter pw = response.getWriter();

    HttpSession hr = request.getSession();
    if(autologin==null) { //자동 로그인을 안 한 경우
        hr.setAttribute("mid", mid);
    }else {
        hr.setAttribute("mid", mid);
        //원래는 암호화해서 작업
        String repass = mpass + "/auto";
        pw.write("<script>"
                + "localStorage.setItem('mid','"+mid+"');"
                + "localStorage.setItem('mpass','"+repass+"');"
                + "localStorage.setItem('autologin','"+autologin+"');"
                + "alert('로그인 하셨습니다'); location.href ='./main.jsp';"
                + "</script>");
    }
}

 


-main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
Object mid = hs.getAttribute("mid");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인페이지에서 자동로그인 해제</title>
</head>
<body>
<%=mid %>님 환영합니다. <br>
<a href="javascript:void storage()">[자동로그인 해제]</a>
<a href="javascript:void logout()">[로그아웃]</a>
</body>
<script>
function storage(){
	//localStorage.clear() : 얘는 모든 storage를 몽땅 삭제해버림.. 꼭필요할때만 사용할것
	localStorage.removeItem("mid"); //특정 storage값만 삭제
	localStorage.removeItem("mpass");
	localStorage.removeItem("autologin");
	alert("자동 로그인을 해제 하셨습니다.");
	location.href="./login.jsp";
}

function logout(){
	location.href = "./logout.jsp";	
}
</script>
</html>


 

'CLASS > SERVLET' 카테고리의 다른 글

#9-1 / 보안  (1) 2024.07.05
web.xml 선언을 하지 않고 사용  (0) 2024.07.05
#8-2 / 게시판 insert 모듈화...  (0) 2024.06.21
#8-1 / 게시판  (0) 2024.06.21
#7-3 / 첨부파일 기능 + database 저장  (0) 2024.06.19