⚡ 자동로그인 체크시 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 |