En nuestras vidas, ya es muy común para el inicio de sesión automático a las cuentas, por lo que usamos filtros para implementar esta función.
Presenta principalmente el inicio de sesión automático del usuario y el inicio de sesión automático cancelado, así como la realización del inicio de sesión automático en un día o n días. Después de agregar la IP del usuario a la lista negra, usa directamente el filtro para volver a una página de advertencia.
La función del filtro es muy potente. Solo necesitamos agregar el servlet después del backend frontal escrito para realizar esta función.
PD: Esto es solo una demostración. Simulé la parte de la base de datos de acceso por mí mismo, centrándome principalmente en la realización de la función de inicio de sesión automática.
Código de recepción:
Si el código de primer plano es exitoso o no se muestra en esta página. Técnicas utilizadas: Aplicación de etiquetas JSTL, valor de lectura de sesión
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> < <html> <fead> </head> <body> <c: if test = "$ {! vacía sessionscope.error}"> Su contraseña o nombre de usuario está mal. <!-Después de visualizarse, debe eliminar el valor dentro de-> <c: eliminar var = "error" scope = "session"/> </c: if> <c: if test = "$ {sessions sessionscope.user.user}" var = "boo"> <h2> Esta es la página para registrar </h2> <formul type = "text" name = "name" /> <br/> pwd: <input type = "text" name = "pwd" /> <br/> no se registra automáticamente en: <input type = "radio" name = "time" valor = "0" /> <br/> un día: <input type = "radio" name = "time" valor = "1" /> <br/> siete días: <input type = "name" name "" "" "Valor" "" Valor "" Valor "Valor" Valor = "1" /> <Br/> Seven Days: <Input Type = "Nombre" "". /> <br/> <input type = "Subt" Value = "Subt"/> </form> </c: if> <c: if test = "$ {! Boo}"> Bienvenido, $ {sessionsCope.user}, registrado con éxito <a href = ""> Módulo 1 </a> <a href = "> Module 2 </a> <a href. value = '/CancelaUtologin' //> "> CancelAutologin </a> </c: if> </body> </html>El código de implementación de Servlet:
Al igual que el código anterior, solo es responsable de interactuar con la recepción: la tecnología utilizada en él incluye la codificación de URL, el valor está en la cookie, la sesión está en la página y la página se salta (se reenvía)
Public void dopost (httpservletrequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioException {String name = request.getParameter ("name"); Cadena pwd = request.getParameter ("pwd"); String time = request.getParameter ("Time"); if (name! = null && pwd! = null && name.equals (pwd))) {// Escribir aquí como desee, debe ir al servicio-> Dao para acceder a la base de datos más adelante // suponiendo que el inicio de sesión sea exitoso, almacenamos la información en la solicitud de sesión. // Compatible con el chino, necesitamos codificar el nombre = urlencoder.encode (nombre, "UTF-8"); pwd = urlencoder.encode (pwd, "utf-8"); Cookie C = nueva cookie ("Autologin", Name+","+Pwd); // Este valor no se puede usar de esta manera. Para consideraciones de seguridad, debemos saber usar cifrado o cifrado secundario, int _time = 60*60*24*integer.valueOf (tiempo); c.setMaxage (_time); Respuesta.AddCookie (C); Response.sendedirect (request.getContextPath ()+"/index.jsp"); // La configuración predeterminada en el filtro es interceptar la redirección, y el reenvío es el reenvío interno directo. Sin embargo, el filtro no es fácil de manejar, pero solo necesita configurarlo en Web.xml. } else {request.getSession (). setAttribute ("Error", "1"); respuesta.sendedirect (request.getContextPath ()+"/index.jsp"); }}Hasta ahora, siento que no hay tecnología. El mismo código que el anterior es ahora la función del filtro.
Inicio de sesión seguro:
Utilizamos la importación dinámica para iniciar sesión de manera segura antes, para evitar que los usuarios inicien sesión sin iniciar sesión después de ingresar al proyecto. Puede ingresar la interfaz a voluntad ingresando el proyecto. La importación dinámica puede lograr esta función, pero es mejor usar filtros.
En general, dofilter () está escrito en el filtro; Solo necesita determinar si el contenedor de sesión es nulo. Esto significa que esto no está registrado. Solo vuelve a la interfaz de inicio de sesión. De lo contrario, déjalo ir
Se presenta el código:
Public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {httpservletRequest req = (httpservletRequest) solicitud; HttpservletResponse resp = (httpservletResponse) respuesta; String Session = (String) req.getSession (). GetAttribute ("usuario"); if (session == null) {system.out.println ("inicio de sesión anormal"); resp.sendedirect (req.getContextPath ()+"/index.jsp"); } else {System.out.println ("Iniciar sesión exitoso"); cadena.dofilter (req, resp); }}Codificación de personajes:
El problema de la codificación de personajes. En el pasado, tuve que ingresarlo manualmente en el dopost () del servlet cada vez, request.setcharacterEncoding ("UTF-8"); Cada servlet necesita entrada, lo cual es demasiado problemático, por lo que usamos filtros para implementarla;
Se presenta el código:
<span style = "font-size: 18px;"> public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {request.setcharacterEncoding (carácter); // eliminar el codificador recibido por el cliente. Chain.dofilter (solicitud, respuesta); } @Override public void init (filterconfig config) lanza ServletException {caracteres = config.getInitParameter ("caracteres"); // a </span> <span style = "font-size: 18px; font-family: arial, helvetica, sans-serif;"> set como una variable global global, </span> <span style = "font style;"; ";"; ";"; ";"; " } </span>El carácter anterior se define como una variable global, y el valor inicial está configurado en Web.xml.
Se presenta el código web.xml:
<filter> <filter-name> carácter </filter-name> <filter-class> cn.hncu.filter.characterfilter </filter-class> <itel-param> <amamname> caracteres </amamname> <amam-value> utf-8 </param-value> </it-param> </filter>
Inicio de sesión automático:
Idea principal: el inicio de sesión automático requiere determinar que la sesión tiene valores. Si lo hay, luego después de iniciar sesión, si no hay no, vaya a la cookie local para encontrarla, existir y coincidir con la base de datos. Si la coincidencia es exitosa, agregue el contenedor de sesión.
Se presenta el código:
Public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {// inicie sesión automáticamente, debe establecer que hay valores en la sesión. Si lo hay, entonces ha iniciado sesión y no, debe acceder a los datos en la cookie. ¿Los datos en la cookie // si los datos en la base de datos coinciden con la base de datos? Sí, establezca el valor en la sesión aquí, no, deje que httpservletRequest req = (httpservletRequest) solicitud; HttpservletResponse resp = (httpservletResponse) respuesta; String Session = (String) req.getSession (). GetAttribute ("usuario"); if (session == null) {// indica que no se ha registrado ninguna cookie en la actualidad CS [] = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getName (). Equals ("Autologin")) {string value = c.getValue (); // Esto está encriptado, pero acabamos de conectar con comas. String [] strs = value.split (","); // En logSerlVet, usamos la codificación primero y luego la conexión de coma. Necesitamos revertir el nombre de la cadena = urldeCoder.Decode (Strs [0], "UTF-8"); Cadena pwd = urlDecoder.Decode (strs [1], "utf-8"); // Obtener nombre, PWD datos en segundo plano para acceder a la base de datos, solo escribimos if (name.equals (pwd)) {req.getSession (). SetAttribute ("user", name); // Establecer los parámetros que rompen en sesión; }}}}} chain.dofilter (req, resp); // debe dejarlo ir. . }Usuarios en la lista negra
Los usuarios en la lista negra, no inician sesión, solo les digan el resultado
Se presenta el código:
Public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {httpservletRequest req = (httpservletRequest) solicitud; HttpservletResponse resp = (httpservletResponse) respuesta; Cadena ip = req.getRemoteaddr (); // recibir IP acceder; System.out.println (IP+"iipp"); if (set.contains (ip)) {// dentro del sistema negro.out.println ("set"); resp.getwriter (). imprime ("Estás en la lista negra .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>"); // El retorno no es posible, porque el índice se intercepta directamente al solicitar el servidor} else {chain.dofilter (req, resp); }} El tipo devuelto por la lista negra es el mejor. Lo agregué manualmente aquí. Originalmente debería leerlo desde la base de datos escribiendo una clase de herramientas. No solo se puede verificar, sino también agregar, eliminar y modificar: lista negra.
Se presenta el código:
Hashset se define como una variable global, y el conjunto contiene contiene, lo cual es muy eficiente.
Public void init (FilterConfig Arg0) lanza ServletException {// Aquí hay una lista de lista negra, recuperada de la base de datos. Aquí hay solo un simple set de simulación. set.add ("localhost"); set.add ("192.132.32.4"); set.add ("127.0.0.1"); }Cancelar el inicio de sesión automático
Cuando el inicio de sesión automático siempre se considera inseguro, establecemos que no hay inicio de sesión automático
Sabíamos antes que el inicio de sesión automático se basa en la tecnología almacenada en las cookies, por lo que aquí solo necesitamos eliminar las cookies.
Debido a que cancelar el inicio de sesión automático es un hipervínculo, se escribe como un servlet.
Se presenta el código:
public void dopost (httpservletRequest req, httpservletReSponse resp) lanza ServletException, ioexception {cookie cc = new Cookie ("Autologin", ""); // El método para eliminar la cookie es crear una conexión con el mismo nombre, y luego establecer la cookie setmaxage = 0; cc.setmaxage (0); cc.setPath (req.getContextPath ()); resp.addcookie (CC); resp.sendedirect (req.getContextPath ()+"/index.jsp"); }Lo anterior puede realizar estas funciones de respuesta corta.
Lo anterior es una explicación detallada del conocimiento relevante introducido por el editor a Javaee utilizando filtros para lograr el inicio de sesión automático y el inicio de sesión seguro para cancelar el inicio de sesión automático. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!