최근에는 요구 사항이있는 프로젝트를 수행했습니다. 자동 로그인 기능을 구현하고 싶습니다. 관련 정보를 확인함으로써 세션 모니터링을 사용하여 수행 할 계획입니다. 다음은 모니터 구성 방법 목록입니다.
1. 프로젝트의 web.xml 파일에 다음 코드를 추가하십시오.
<!-세션 리스너 추가-> <Leater> <Leater-Class> 청취자 경로 </Learger-Class> </largeer>
2. Java 클래스를 작성하십시오.
public class sessionlistener는 httpsessionListener {public void sessioncreated (httpsessionEvent arg0) {// simpledateformat가 SimpleFormat을 만들 때 실행되면 simpleformat = new simplededateformat ( "mm-ss-ms"); string nowtimes = simpleformat.format (new date ()); user = // system; // system; // system; // system; // system; 시간 : "+nowtimes+"_ "+u); httpsession ses = arg0.getsession (); String id = ses.getId ()+"_ "+ses.getCreationTime ();} public void sessionDestroyed (httpsessionEvent arg0) {// simpledateformat = newsformat = news SimpledateFormat = new simpledateformat ( "mm-ss-ms"); 문자열 nowtimes = simpleformat.format (new date ()); //system.out.println("session 님이 만료되었습니다 .. 종료 시간 : "+nowtimes);}}구성이 완료된 후 세션이 만료 된 후 세션 청구 메소드를 성공적으로 입력했습니다. 페이지 점프 작업을 수행 할 준비가되었습니다. 나는 갑자기 점프를 쓰는 방법을 알게되었습니다. 나는 기절했고 마스터에게 물어보기 위해 인터넷을 계속 서핑했다. 이 모니터는 일부 배경 통계 처리로 수행되었으며 페이지 점프의 기능을 깨닫지 못했습니다.
이 방법 만 포기하고 필터를 사용하여 구현할 수 있습니다.
1. Web.xml에 필터 구성을 추가하십시오
<filter> <filter-name> sessionFilter </filter-name> <filter-class> com.orchestrall.web.helper.session.sessionfilter </filter-class> </filter> <filter-name> SessionFilter </filter-name> <url-pattern> </url-pattern>
2. 필터 인터페이스를 구현하기 위해 새 SessionFilter 클래스를 만듭니다.
공개 클래스 세션 필터는 필터 {public void destroy () {// todo auto-auto-kenerated method stub} public void dofilter (servletrequest request, servletresponse 응답, 필터 체인 체인) 던지기 ioexception, servletexception {httpservletrequest) 요청; httpresponse = (httpservletresponse) 응답; httpsession session = httprequest.getsession (); // urlstring loginurl = httprequest.getContextPath () + "/adgring url = httprequest.getRequest.getRequest. url.substring (url.lastindexof ( "/")); // 타임 아웃 처리, ajax 요청 시간 초과는 타임 아웃 상태를 설정하고 페이지 요청 시간 초과가 프롬프트를 반환하고 if (path.indexof ( ". action")! = -1 && session.getattribute ( "login_success") {// (httprequest.getheader ( "x- requested-with")! = null && httprequest.getheader ( "x-requested-with"). equalsignorecase ( "xmlhttprequest")) {httpresponse.addheader ( "sessionstatus", "timeout"); httpresponse.addheader ( "loginpath", loginurl); chain.dofilter (요청, 응답); // 불가능, 그렇지 않으면 요청이 오류가 발생합니다} else {string str = "<script language = 'javaScript'> Alert ( '세션이 다시 로그인); " '; </script>"; response.setContentType ( "text/html; charset = utf-8"); // 중국어가 달린 시도 {printwriter = response.getwriter (); writer.write (str); writer.flush (); writer.close (} catch (exerce e) {E.printstacktrace ()}}. {chain.dofilter (요청, 응답);}}@attraderPublic void init (FilterConfig arg0) servletexception {// todo 자동 생성 메소드 스터브}}}.3. AJAX 요청 세션 시간 초과에 사용되는 클라이언트 js
jQuery의 경우
<script type = "text/javaScript"> $ (document) .ajaxcomplete (함수 (event, xhr, settings) {if (xhr.getResponseheader ( "sessionStatus") == "timeout") {if (xhr.getResponseHeader ( "loginPath")) {ALERT ( "SESSION FREPES, 다시 로그인하십시오!"); window.location.replace (xhr.getResponseHeader ( "loginPath")} elere ( "요청 시간 초과, 다시 로그인하십시오!"); </스크립트>extjs에 대한 Ajax 요청
ext.ajax.on ( 'requestComplete', CheckusersessionStatus, this); 함수 checkUsersessionStatus (conn, response, 옵션) {if (response.getResponseHeader ( "sessionStatus") == 'timeout') {if (response.getResponseHeader ( "loginPath")) {retaint. = response.getResponseheader ( "loginpath");} else {alert ( "요청 시간 초과, 다시 로그인하십시오!");}}}특정 ajax 요청이 글로벌 메소드의 영향을받지 않으면 $ .ajax () 메소드를 사용할 때 매개 변수의 글로벌을 False로 설정할 수 있습니다. jQuery 코드는 다음과 같습니다.
$ .ajax ({url : "test.html", Global : False // Global Ajax 이벤트를 트리거하지 마십시오})위는 편집자가 세션이 만료 된 후 로그인 페이지로 자동 이동할 수 있도록 편집기가 소개 한 예제 코드입니다. 모든 사람에게 도움이되기를 바랍니다. 더 알고 싶다면 Wulin.com 웹 사이트에주의를 기울이십시오!