Ich habe kürzlich an einem Projekt gearbeitet, bei dem die automatische Anmeldefunktion implementiert werden musste. Nachdem ich relevante Informationen konsultiert hatte, plante ich, dafür die Sitzungsüberwachung zu verwenden:
1. Fügen Sie den folgenden Code zur web.xml-Datei des Projekts hinzu:
<!--添加Session监听器--> <listener> <listener-class> 监听器路径 </listener-class> </listener>
2. Schreiben Sie eine Java-Klasse.
public class SessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent arg0) { // session创建时执行 SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms"); String nowtimes = simpleFormat.format(new Date()); User u=null; //System.out.println("执行。。 当前时间:"+nowtimes+"_"+u); HttpSession ses= arg0.getSession(); String id=ses.getId()+"_"+ses.getCreationTime(); } public void sessionDestroyed(HttpSessionEvent arg0) { // session失效时执行 SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms"); String nowtimes = simpleFormat.format(new Date()); //System.out.println("session失效了。。 结束时间: "+nowtimes); } }
Nachdem die Konfiguration abgeschlossen ist und die Sitzung abläuft, wird die sessionDestroyed-Methode erfolgreich eingegeben und die Ausführung des Seitensprungvorgangs vorbereitet Wie man den Sprung schreibt, war fassungslos, ging weiter online, um die Experten zu konsultieren, und stellte fest, dass diese Überwachung einer statistischen Hintergrundverarbeitung dient und die Seitensprungfunktion nicht realisieren kann.
Wir können diese Methode nur aufgeben und mit der Verwendung von Filtern beginnen
1 Filterkonfiguration in web.xml hinzufügen
<filter> <filter-name>sessionFilter</filter-name> <filter-class>com.orchestrall.web.helper.session.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>/actions/*</url-pattern> </filter-mapping>
2. Erstellen Sie eine neue SessionFilter-Klasse und implementieren Sie die Filter-Schnittstelle.
public class SessionFilterimplements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; HttpSession session = httpRequest.getSession(); // 登陆url String loginUrl = httpRequest.getContextPath() + "/admin/login.jsp"; String url = httpRequest.getRequestURI(); String path = url.substring(url.lastIndexOf("/")); // 超时处理,ajax请求超时设置超时状态,页面请求超时则返回提示并重定向 if (path.indexOf(".action") != -1 && session.getAttribute("LOGIN_SUCCESS") == null) { // 判断是否为ajax请求 if (httpRequest.getHeader("x-requested-with") != null && httpRequest.getHeader("x-requested-with") .equalsIgnoreCase("XMLHttpRequest")) { httpResponse.addHeader("sessionstatus", "timeOut"); httpResponse.addHeader("loginPath", loginUrl); chain.doFilter(request, response);// 不可少,否则请求会出错 } else { String str = "<script language='javascript'>alert('会话过期,请重新登录');" + "window.top.location.href='" + loginUrl + "';</script>"; response.setContentType("text/html;charset=UTF-8");// 解决中文乱码 try { PrintWriter writer = response.getWriter(); writer.write(str); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } } else { chain.doFilter(request, response); } } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
3. Client JS, verwendet für Ajax-Anfragesitzungs-Timeout
Für JQuery
<script type="text/javascript"> $(document).ajaxComplete(function(event, xhr, settings) { if(xhr.getResponseHeader("sessionstatus")=="timeOut"){ if(xhr.getResponseHeader("loginPath")){ alert("会话过期,请重新登陆!"); window.location.replace(xhr.getResponseHeader("loginPath")); }else{ alert("请求超时请重新登陆 !"); } } }); </script>
Für extjs-Ajax-Anfragen
Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this); function checkUserSessionStatus(conn,response,options){ if(response.getResponseHeader("sessionstatus") == 'timeout'){ if(response.getResponseHeader("loginPath")){ alert("会话过期,请重新登陆!"); window.top.location.href = response.getResponseHeader("loginPath"); }else{ alert("请求超时请重新登陆 !"); } } }
Wenn eine Ajax-Anfrage nicht von der globalen Methode betroffen ist, dann Sie kann den Parameter global auf false setzen, wenn die Methode $.ajax() verwendet wird. Der JQuery-Code lautet wie folgt:
$.ajax({ url:"test.html", global:false//不触发全局ajax事件 })
wie oben erwähnt Dies ist der Beispielcode, den Ihnen der Editor vorstellt, um nach Ablauf der Sitzung automatisch zur Anmeldeseite zu springen. Wenn Sie mehr wissen möchten, schauen Sie sich bitte die chinesische PHP-Website an.
Weitere verwandte Artikel zu Beispielcode, der nach Ablauf der Sitzung automatisch zur Anmeldeseite springt, finden Sie auf der chinesischen PHP-Website!