My work space/JSP/Servlet
HttpSessionBindingListener로 구현한 중복로그인체크(2)
schpritz
2008. 9. 8. 14:42
=============================== login.jsp ============================ <% /* * 로그인 페이지, 로그인전 현재 로그인된 이용자수를 출력한다. */ %> <%@ page language="java" contentType="text/html; charset=EUC-KR"%> <%@ page import="test.LoginManager"%> <%! //싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다. LoginManager loginManager = LoginManager.getInstance(); %> <% //login_try에서 로그인을 하지 않을경우 세션에 남아있는 userId를 제거한다. session.removeAttribute("userId"); %> <html> <head> <title>로그인 중복방지 Test</title> </head> <body> <h3 align="center">현재 접속자 수 : <%=loginManager.getUserCount() %>명</h3> <form action="login_try.jsp" name="login"> <div align="center"> 아이디 : <input type="text" name="userId"><br> 비밀번호 : <input type="passward" name="userPw"><br> <input type="submit" value="로그인"> </div> </form> </body> </html>
============================= login_try.jsp ============================ <% /* * 로그인 시도페이지, id, pw유무를 체크하고, 올바르다면 * 이미 접속한 아이디인지 체크한다. 이미 접속한 아이디라면 * 기존 접속을 유지할것인지, 기존접속을 kill시키고 로그인할것인지를 * 확인한다. */ %> <%@ page language="java" contentType="text/html; charset=EUC-KR" %> <%@ page import="test.LoginManager"%> <%! //싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다. LoginManager loginManager = LoginManager.getInstance(); %> <html> <head> <title>로그인 중복방지 Test</title> </head> <body align="center" valign="center"> <% String userId = request.getParameter("userId"); String userPw = request.getParameter("userPw"); //아이디 패스워드 체크 if(loginManager.isValid(userId, userPw)){ //접속자 아이디를 세션에 담는다. session.setAttribute("userId", userId); //이미 접속한 아이디인지 체크한다. //out.println(userId); //out.println(loginManager.isUsing(userId)); loginManager.printloginUsers(); if(loginManager.isUsing(userId)){ %> 이미 접속중입니다. 기존의 접속을 종료하시겠습니까?<P> <a href="disconnect.jsp">예 </a> <a href="login.jsp">아니오</a> <% }else{ loginManager.setSession(session, userId); response.sendRedirect("login_ok.jsp"); } %> <% }else{ %> <script> alert("로그인후 이용해 주세요."); location.href = "login.jsp"; </script> <% } %> </body> </html>
========================== disconnect.jsp ============================ <% /* * login_try.jsp에서 로그인 중복시 무시하고 로그인할경우 호출. * 기존의 session을 끊고 hashTable에 저장후 login_ok.jsp를 호출. */ %> <%@ page language="java" contentType="text/html; charset=EUC-KR" %> <%@ page import="test.LoginManager"%> <%! //싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다. LoginManager loginManager = LoginManager.getInstance(); %> <html> <head> <title>로그인 중복방지 Test</title> </head> <body> <% String userId = (String)session.getAttribute("userId"); if(userId != null){ //기존의 접속(세션)을 끊는다. loginManager.removeSession(userId); //새로운 세션을 등록한다. setSession함수를 수행하면 valueBound()함수가 호출된다. loginManager.setSession(session, userId); response.sendRedirect("login_ok.jsp"); } %> </body> </html>
============================= login_ok.jsp ============================ <% /* * 정상적으로 로그인되었을경우 호출 * 접속자 아이디를 보여주고 현재 접속중인 모든 사용자를 뿌려준다. */ %> <%@ page language="java" contentType="text/html; charset=EUC-KR" %> <%@ page import="java.util.*, test.LoginManager"%>
<%! //싱글톤 패턴을 사용하였기 때문에 생생되어있는 인스턴스를 얻어온다. LoginManager loginManager = LoginManager.getInstance(); %> <html> <head> <title>로그인 중복방지 Test</title> </head> <body align="center" valign="center"> <% //jsp내장객체 session을 이용하여 접속자 아이디를 얻어온다. String userId = (String)session.getAttribute("userId");
if(userId != null){ %> <%=userId%>님 환영합니다. <a href="logout.jsp">로그아웃</a> <p> 현재 접속자 : <br> <% Collection collection = loginManager.getUsers(); Iterator iterator = collection.iterator(); int i=0; while(iterator.hasNext()){ out.print((++i)+". "+iterator.next()+"<br>"); } }else{ %> <script> alert("로그인후 이용해 주세요."); location.href = "login.jsp"; </script> <% } %> </body> </html>
============================= logout.jsp ============================== <% /* * 로그아웃을 클릭했을때 호출된다. */ %> <%@ page language="java" contentType="text/html; charset=EUC-KR" %> <% //session을 확~~~끊어 버린다. 이시점에 LoginManager의 valueUnbound()가 호출된다. session.invalidate(); response.sendRedirect("login.jsp"); %>
출처 http://blog.naver.com/julymorning4/100032436300 | |