Este artículo comparte el código detallado para Java para verificar si el usuario ha sido iniciado y realiza el inicio de sesión automático para su referencia. El contenido específico es el siguiente
1. Verifique que el usuario ya haya iniciado sesión
paquete cn.hongxin.filter; import java.io.ioException; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterConfig; import javax.servlet.servlettet; import javax.servlet.servletRest; import javax.servlet.servlet. javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; Public Class LoginFilter implementa Filter {public void init (filterConfig FilterConfig) lanza ServletException {} public void dofilter (ServletRequest Solicitud, Respuesta ServletResponse, FilterChain Chain) lanza IOException, ServletException {// Solicitud de foración a HTTP ... HTTPSEVElTREdRest Req = ((HTTPSECTSEVELECTSESVERSEVElEpSequest) Solicitud; // Obtener sesión httpsession ss = req.getSession (); // Obtenga el usuario de la sesión if (ss.getAttribute ("user") == null) {system.err.println ("aún no ha iniciado sesión"); req.getSession (). setAttribute ("msg", "por favor inicie sesión primero"); // redirigir para iniciar sesión httpservletResponse resp = (httpservletResponse) respuesta; resp.sendedirect (req.getContextPath ()+"/index.jsp"); [W2]} else {// liberación de chain.dofilter (solicitud, respuesta); }} public void destruye () {}}Configurar en Web.xml y considere JSPS/*:
<filter> <filter-name> login </filter-name> <filter-class> cn.itcast.filter.loginfilter </filter-class> </siltre> <filter-mapping> <filter-name> login </filtre-name> <url-pattern>/jsps/*</url-Pattern> <Url-pattern>/vistas/*</url-pattern> </filtrador> </filtro-mappe
2. Date cuenta de inicio de sesión automático
El inicio de sesión automático es ayudar a los usuarios iniciar sesión sin ingresar su nombre de usuario y contraseña nuevamente cuando usa esta página web muchas veces.
Significa que el usuario guarda la información de inicio de sesión y la persona del usuario a una cookie de archivo local.
Nombre, valor nueva cookie (clave, valor);
Ruta: el valor predeterminado es la ruta donde se encuentra el serlvet que actualmente guarda la cookie.
Si la cookie está en tal ruta: http: // loclhost: 8080/proyecto/abc/aservlet, la ruta de la cookie es: http: // loclhost/proyecto/abc
Entonces significa:
Solo el servlet ubicado en el directorio http: // loclhost/proyecto/ABC puede leer el valor de esta cookie.
si:
Guarde la clase de cookie: http: // loclhost: 8080/proyecto/a/b/aservlet, la ruta predeterminada de la cookie es; http: // loclhost/proyecto/a/b
Paso 1: desarrollar una página de inicio de sesión
<c: elegir> <c: when test = "$ {sessionscope de vacío type = "radio" name = "auto" value = "1"> 1 día <br/> <input type = "radio" name = "auto" value = "7"> 1 semana <br/> <input type = "enviar"/> </form> </c: when> <c: lo contrario> ya está iniciado: $ {nombre} <br/> <a href = "<c: valor = '/loginservlet' //> "> Loginservlet '/loginservlet' //"> Loginservlet </a> </c: de lo contrario> </c: elegir>Paso 2: Guardar cookies con éxito
Public void dopost (solicitud httpservletRequest, httpservletreponse respuesta) lanza ServletException, ioexception {// recibe nombre de nombre de nombre = request.getParameter ("name"); Cadena automática = request.getParameter ("Auto"); // Poner información del usuario en la sesión Solicitud.getSession (). SetAttribute ("Nombre", Nombre); // Defiende si Auto es -1 if (! Auto.equals (" -1")) {int day = integer.ParseInt (auto); // 1 | 7 int Seconds = 60*60*24*Día; // declarar cookie cookie c = nueva cookie ("autóloga", nombre); C.SetMaxage (segundos); C.SetPath (request.getContextPath ()); // Guardar la respuesta de cookie.addcookie (c); }}Paso 3: Se debe lograr el inicio de sesión automático si necesita acceso a cualquier página en este sitio web.
Escriba un escrutador para considerar toda la url =/*. Lea todas las cookies en Dofilter. ¿Hay una cookie de nombre con el nombre de Autologin?
Siempre déjelo ir.
public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {// lea cookie aquí httpservletRequest req = (httpservletRequest) solicitud; // Obtenga todas las cookies Cookies [] cs = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getName (). Equals ("Autologin")) {// Si hay una cookie que se registra automáticamente en String Value = C.GetValue (); // Nombre de usuario // Ingangera con éxito a Req.getSession (). romper; }}} // independientemente de si se registra automáticamente en chain.dofilter (solicitud, respuesta); }Cuarto implica: Configurar todas las URL =/* en Web.xml
<filter> <filter-name> auto </filter-name> <filter-class> cn.itcast.filter.autofilter </filter-class> </siltre> <filter-mapping> <filter-name> auto </filtre-name> <url-pattern>/*</sl-pattern> </filter-mapping>
Paso 5: Salida de desarrollo
System.err.println ("Salida del usuario"); // Eliminar la sesión completa de la sesión.getSession (). Invalidate (); Cookie C = nueva cookie ("Autologin", "DDD"); C.SetMaxage (0); C.SetPath (request.getContextPath ()); Respuesta.AddCookie (C); // request.getSession (). RemoveAttribute ("Nombre"); respuesta.sendedirect (request.getContextPath ()+"/index.jsp");Paso 6: optimizar el código
Dado que el usuario también ingresará el método Dofilter de Autofiilter cuando inicia sesión manualmente, y lee todas las cookies para atravesarlo una vez. Y este recorrido es redundante para el usuario.
Por lo tanto, la URL de LoginServet debe usarse en Dofiler.
Y no puede iniciar sesión automáticamente al cerrar sesión.
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.