Recientemente, he realizado un proyecto que tiene requisitos. Quiero implementar la función de inicio de sesión automática. Al verificar la información relevante, planeo usar el monitoreo de la sesión para hacerlo. La siguiente es una lista de los métodos para configurar el monitor:
1. Agregue el siguiente código al archivo web.xml del proyecto:
<!-Agregue el oyente de la sesión-> <Oyerer> <Oyerer-class> Path del oyente </oyente-class> </oyente>
2. Escribe clases de Java.
Public Class SessionListener implementa httpsessionListener {public void sessionCreated (httpsessionEvent arg0) {// SimpleFormat se ejecuta cuando la sesión se crea SimpleFormat SimpleFormat = new SimpledAformat ("mm-sss-ms"); string nowimes = simplyFormat.format (new Date (); user u = null; // system.out.printl ("ejecutformat.format.cuent. "+NowTimes+" _ "+u); httpsession ses = arg0.getSession (); string id = ses.getid ()+" _ "+ses.getCreationTime ();} public void sessionDestroyed (httpSessionEvent arg0) {// Simpledeformat se ejecuta cuando la sesión falla simulando Simple -SimpleFormat = New New NewnEn New SimpleDateFormat ("MM-SS-MS"); String NowTimes = SimpleFormat.Format (New Date ()); //System.out.println("session ha expirado .. Tiempo de finalización: "+ahoraTimes);}}Después de completar la configuración, ingresé con éxito el método de sessionDestrOyed después de que expire la sesión. Estaba listo para realizar la operación de salto de página. De repente descubrí cómo escribir un salto. Estaba aturdido y seguí navegando por Internet para preguntarle al maestro. Descubrí que este monitor se realizó con algún procesamiento de estadísticas de fondo y no podía darse cuenta de la función del salto de la página.
Solo puedo renunciar a este método y comenzar a usar filtros para implementarlo
1. Agregue la configuración del filtro en web.xml
<filter> <filter-name> sessionFilter </filter-name> <filter-class> com.orchestrall.web.helper.session.sessionfilter </filter-class> </filter> <filter-mapping> <filter-name> sessionFilter </filter-name> <s url-pattern>/acciones/*</ url-patern> </filter-papping>
2. Cree una nueva clase SessionFilter para implementar la interfaz de filtro.
public class SessionFilter implements 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) respuesta; httpsession session = httprequest.getSession (); // Iniciar sesión en urlString loginurl = httprequest.getContextPath () + "/admin/login.jsp";string url = httprequest.getRequesturi (); url.substring (url.lastindexof ("/")); // procesamiento de tiempo de espera, el tiempo de espera de la solicitud de AJAX establece el estado de tiempo de espera, y el tiempo de espera de la solicitud de la página devolverá un indicador y redirección if (path.indexof (". Action")! = -1 && session.getattribute ("login_success") == Null) {// Determinar si es un Ajax Soly de Ajax es un Ajax si es un Ajax. (httprequest.getheader ("x-requested-with")! = null && httprequest.getheader ("X-requested-with-with"). Equalsignorecase ("xmlhttprequest")) {httppesponse.addheader ("sessionstatus",,,, ",",,, ",,",, ",,,",,,,, ",,",, ",",,,, ",,,",, ",,,",, ",,",, ",", ",", "," "TIMEOUT"); httpResponse.addHeader ("loginPath", loginurl); chain.dofilter (request, respuesta); // imposible, de lo contrario la solicitud Error} else {String str = "<script language = 'javaScript'> alert ('session expire, por favor inicie sesión nuevamente');"+ "window.top.locational.href = '+ loginurl+" "'; </script>"; respuesta.setContentType ("text/html; charset = utf-8"); // Solve chino Garlle Garlle {Chain.DoFilter (solicitud, respuesta);}}@overridePublic void init (filterconfig arg0) lanza ServletException {// TODO Auto Generado Stub}}3. Cliente JS, utilizado para el tiempo de espera de la sesión de solicitud de AJAX
Para jQuery
<script type = "text/javaScript"> $ (documento) .AJAXCOMPLETE (function (event, xhr, settings) {if (xhr.getResponseHeader ("sessionStatus") == "Tiempo de tiempo") {if (xhr.getResponseHeader ("logInpath")) {alerta ("Session, por favor, ¡inicie sesión nuevamente!"); ");"); Window.location.replace (xhr.getResponseHeader ("LoginPath")); </script>solicitud de AJAX para extjs
Ext.AJAX.On ('requestcomplete', checkUsersessionStatus, this); function checkUsersessessionStatus (conn, respuesta, opciones) {if (respuesta.getResponseHeader ("sessionStatus") == 'TimeOut') {if (Response.getResponseHeader ("loginPath")) {alerta ("Session expires, por favor!"); ");"); respuesta.getResponseHeader ("LoginPath");} else {alert ("Solicitar tiempo de espera, ¡inicie sesión nuevamente!");}}}Si una determinada solicitud de AJAX no se ve afectada por el método global, entonces cuando se usa el método $ .AJAX (), el global en el parámetro se puede establecer en falso. El código jQuery es el siguiente:
$ .AJAX ({url: "test.html", global: falso // no active el evento global ajax})El anterior es el código de ejemplo que el editor le presentó que la sesión saltará automáticamente a la página de inicio de sesión después de que expire. Espero que sea útil para todos. Si desea saber más, ¡preste atención al sitio web de Wulin.com!