일반적인 설명
며칠 전, 나는 우연히이 문제를 생각하고 그것이 실용적이라고 생각했고 그것을 분류해야했습니다. 간단한 모드를 우연히 쓰는 것은 어렵지 않습니다. 실제로 아이디어를 똑바로 세우는 것은 매우 간단합니다.
사용자가 동시에 로그인 할 수없고 Sina, Baidu 등에 대해 생각할 수 없다는 것을 깨닫기 위해 실제로는 한 곳에 로그인하여 다른 장소를 "짜기"하면 구현 결과가 무엇인지 알 수 있습니다. 그런 다음 반전하면 더 명확한 아이디어를 형성 할 수 있습니다. 함께 토론합시다.
우선, 사용자가 로그인하는 데 사용되는 로그인, 즉 온라인 사용자의 원칙을 이해해야합니다. 이것은 세션에 사용자의 객체를 저장 한 다음 프레임에서 호출하는 것입니다. 다른 특정 페이지를 직접 참조 할 수 있습니다. 그런 다음 "압착"의 기능은 새로 생성 된 세션을 효과적으로 만들고 원래 사용자에 저장된 세션을 유효하게 만드는 것입니다. 이 시점에서 일반적인 아이디어가 확립되었습니다. 그래서 그것을 달성하는 방법?
구현 방법을 알고 싶다면 세션에 사용자 객체를 저장하는 프로세스를 이해해야합니다. 사용자가 로그인하면 사용자의 객체 사용자와 session.setAttribute(key,value); 사용자의 사용자 ID 또는 기타 고유 식별자를 키로 저장하고 사용자 객체를 값으로 저장합니다. 이렇게하면 언제 어디서나 유일한 사용자에게 전화 할 수 있습니다. 사용자 저장소의 문제가 해결되었습니다. 로그인 할 때 세션 폐지 문제는 어떻습니까?
이것은 실제로 어렵지 않습니다. 맵을 사용하여 사용자의 신원을 키로 저장하고 해당 세션을 값으로 저장하는 것과 같이 더 많은 세션 특성을 가질 수 있습니다. 그런 다음 사용자가 반복적으로 로그인하면 해당 세션을 꺼내서 무효화하면됩니다.
이 시점에서 구현 아이디어는 분명했습니다. 오랫동안 모든 사람이 코드를 읽을 수 없습니까? 코드는 다음과 같습니다.
사전 준비, JSP 인터페이스
인터페이스는 간단하고 간단한 로그인 인터페이스입니다
<form action = "<%= request.getContextPath ()%>/userWXPServlet"method = "post"> username Š <input type = "text"name = "username"/> <br/> possport <input type = "text"name = "password"/> <br/> input type = "value ="value = "value ="제출 ".
성공 후 페이지로 이동하십시오
환영 : ${sessionScope.user.username}登陆!<br/>
실패한 페이지를 작성하지 않았으며 직접 쓸 수 있으며 실패한 페이지에 대해 할 말이 없습니다.
엔티티 및 로그인 구현
사용자의 Javabean
개인 문자열 사용자 이름; 개인 문자열 비밀번호; public user () {} public user (문자열 사용자, 문자열 암호) {super (); this.username = 사용자; this.password = 비밀번호; } public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public String getPassword () {return password; } public void setpassword (문자열 비밀번호) {this.password = password; }사용자의 서비스 구현 방법에 로그인하므로 DAO와 인터페이스를 작성하지 않으면 모든 것이 간단합니다.
public boolean domain (user user) {properties pro = new Properties (); inputStream은 = userwxpservlet.class.getClassLoader (). getResourCeasStream ( "user_wxp.properties"); 문자열 암호 = null; System.out.println (is+"-------->"+pro); if (user == null) {return false; } try {pro.load (is); password = pro.getProperty (user.getusername ()); if (user.getPassword ()! = null && user.getPassword (). Equals (password)) {System.out.println ( "성공적으로 로그인"); 진실을 반환하십시오. }} catch (ioexception e) {e.printstacktrace (); } 마침내 {if (is! = null) {try {is.close (); } catch (ioexception e) {e.printstacktrace (); }} 거짓을 반환합니다. }로그인이 성공하면 true를 반환하고 실패하면 거짓입니다.
서블릿 및 해당 논리 도구 클래스
다음 코드는 사용자 작동을위한 실제 코드입니다.
여기서 두 개의 클래스, 하나의 도구 클래스와 하나의 핵심 서블릿 처리 클래스를 정의했습니다.
다음 코드와 같은 일부 공통 요소는 도구 클래스에 추가됩니다.
/*** 각 사용자는 세션을 저장합니다. 모든 종류의 방식으로 쉽게 작동 할 수 있습니다! ! ! */ public static map <String, httpsession> mapsession = new Hashmap <String, httpsession> (); 사용자 종료 코드 (해당 사용자 객체를 폐지하거나 해당 사용자 객체를 제거해야합니다) : [Java] 평범한 copypublic static void userLogout (String username)보기 {if (mapsession.get (username)! = null) {// httpsession 세션 = mapsession.get (username); // 맵 <사용자 이름, 세션>에서 사용자를 제거하십시오. 사용자를 종료하는 것을 잊지 말고 세션을 폐지하거나 사용자 맵시션을 제거해야합니다 (사용자 이름); // 세션 열거의 속성 모음을 가져옵니다. e = session.getAttributeNames (); // 모든 속성 삭제 while (e.hasmoreElements ()) {String sessionName = (string) e.nextElement (); session.removeattribute (SessionName); } // 세션 세션을 폐지합니다. invalidate (); }}서블릿 코드는 다음과 같습니다.
보호 된 void doget (httpservletrequest request, httpservletResponse 응답) servletexception, ioexception {string username = request.getParameter ( "username"); 문자열 비밀번호 = request.getParameter ( "password"); 사용자 사용자 = 새 사용자 (사용자 이름, 비밀번호); uservice userervice = new Userservice (); httpsession session = request.getSession (); if (userService.dologin (user)) {// 로그인 후 사용자를 세션 세션에 삽입합니다. if (cheacksession (username)) {// 세션이 이미 존재하는 경우 사용자 dbutil.userlogout (username)를 종료합니다. } // 맵에서 새 세션 저장 <username, session> dbutil.mapsession.put (사용자 이름, 세션); // 작업 성공 후, 점프하면, 로그인이 성공적으로 요청되었음을 다른 사람들에게 알리기 위해 여기에서 리디렉션하는 것이 가장 좋습니다. 반품 ; } // 여기에서 실패 페이지로 건너 뜁니다. 독자가 관심이 있으시면 직접 추가 할 수 있습니다}점검 코드 (사용자 이름)는 다음과 같습니다.
/** *이 세션이 이미 포함되어 있는지 확인 * @param username * @return true : 이미 존재합니다. 삭제해야합니다! 거짓 : 존재하지 않습니다 */ private boolean checksession (문자열 username) {httpsession session = dbutil.mapsession.get (username); if (session! = null) {return true; } false를 반환합니다. }마지막으로 서블릿의 XML 구성을 첨부하십시오
<Servlet> <cression> 테스트의 경우 사용자는 반복적으로 로그인 할 수 없습니다 </desision> <splay-name> userwxpservlet </display-name> <servlet-name> userwxpservlet </servlet-name> <servlet-class> com.fingard.rabbit.wxp_test.servlet.userwxpservlet </servlets class> </servlet> </servlet> <Servlet-name> userwxpservlet </servlet-name> <url-pattern>/userwxpservlet </url-pattern> </servlet-mapping>
위는 편집기가 사용자의 비 반복 로그인 기능을 구현하기 위해 소개 한 Java 기능입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!