Introduce principalmente struts2 combinados con cookies para lograr el inicio de sesión automático
Al combinar Struts2 con cookies, debe prestar atención al uso. Acccion Acciones para realizar la lectura de cookies
paquete jar de Struts2
Enlace el archivo de la base de datos DB.Properties
dbdriver = oracle.jdbc.driver.oracledriverurl = jdbc: oracle: delgado: @localhost: 1521: orclusername = testpassword = contraseña
Código de capa DAO para obtener información del usuario a través del nombre de inicio de sesión
paquete com.struts.dao.impl; import java.sql.connection; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlexception; import.struts.dao.userdao; import UserDaoImpl implementa UserDao {private BeanConnection dbconn = new BeanConnection (); Public User Login (String LoginName) {Connection conn = dbconn.getConnection (); ResultSet rs = null; Cadena selsql = "Seleccionar * de t_scoa_sys_user donde f_loginname = '"+loginname+"'"; //System.out.println(selsql); Preparado PSTMT = NULL; Usuario user = nulo; intente {pstmt = conn.preparestatement (selsql); //pstmt.setString(3, LoginName); rs = pstmt.executeQuery (); while (rs.next ()) {user = new User (); user.setId (rs.getLong (1)); user.setf_username (rs.getString (2)); user.setf_loginname (rs.getString (3)); user.setf_sex (rs.getString (4)); user.setf_state (rs.getString (5)); user.setf_email (rs.getString (6)); user.setf_mobilephone (rs.getString (7)); user.setf_secretaryID (rs.getLong (8)); user.setf_password (rs.getString (9)); user.setf_order (rs.getLong (10)); user.setf_note (rs.getString (11)); user.setf_infomodifyTemplateId (rs.getLong (12)); }} Catch (SQLException e) {E.PrintStackTrace (); } Return User; } public void save (usuario de usuario) {} public static void main (string [] args) {userDaoImpl daoImpl = new UserDaoMpl (); daoimpl.login ("admin"); }}Herramienta de cookieutils
paquete com.struts.util; import javax.servlet.http.cookie; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpsession; import org.apache.commons.lang.xwork.stringutils; import com.struts.action.loginaction; import com.struts.proj.user; import com.struts.service.userservice; import com.struts.service.impl.userserviceImpl; public class CookieUtils {public static static final string user_cookie = "user.cookie"; // Agregar cookie public cookie addcookie (usuario de usuario) {cookie cookie = new Cookie (user_cookie, user.getf_loginname () + "," + desede.decryptit (user.getf_password ())); cookie.setMaxage (60 * 60 * 24 * 365); Cookie de regreso; } // Obtener cookie public boolean getcookie (httpservletRequest solicitud, ussereService Userservice) {request = servletActionContext.getRequest (); Cookie [] cookies = request.getcookies (); UserService = new UserServiceImpl (); if (cookies! = null) {for (cookie cookie: cookies) {if (cookieUtils.user_cookie.equals (cookie.getName ())) {string value = cookie.getValue (); // Determinar si el carácter está vacío if (stringUtils.isnotblank (valor)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; String Password = Spilled [1]; Usuario user = Userservice.login (LoginName, Password); if (user! = null) {httpsession session = request.getSession (); Session .SetAttribute (LoginAction.user_session, usuario); // Agregar usuario a la sesión return real }}}}} return false; } // Eliminar cookie public cookie delcookie (solicitud httpservletrequest) {request = servletactionContext.getRequest (); Cookie [] cookies = request.getcookies (); if (cookies! = null) {for (cookie cookie: cookies) {if (user_cookie.equals (cookie.getName ()) {cookie.setValue (""); Cookie.SetMaxage (0); Cookie de regreso; }} return null; }}Código de capa de servicio para verificar si el nombre de usuario y la contraseña son correctos. Utilizo el algoritmo de cifrado localmente y necesito ser descifrado. Los amigos pueden eliminar la contraseña
paquete com.struts.service.impl; import com.struts.dao.userdao; import com.struts.dao.impl.userdaoiMpl; import UserDaoImpl (); Public User Login (String LoginName, String Password) {User User = userDao.login (LoginName); if (user == null) {system.out.println ("El nombre de usuario no existe, ¡consulte e inicia sesión nuevamente!"); } if (! desede.decryptit (user.getf_password ()). Equals (contraseña)) {System.out.println ("Error de contraseña"); } Return User; } public static void main (string [] args) {UserserviceImpl useImp = new UserServiceImpl (); System.out.println (useimp.login ("admin", "1234")); }}Verificación del archivo de configuración Struts2.xml, LoginAction y ValidAteCodeAction Código de verificación de Struts2
<? xml versión = "1.0" encoding = "utf-8"?> <! DocType Struts public "-// Apache Software Foundation // Dtd Struts Configuration 2.1 // en" "http://struts.apache.org/dtds/struts-2.1.dtdd"> <truts> <stitant name = "Struts.i18n18n18n18n" " value = "true"/> <constant name = "struts.devmode" value = "true"/> <paquete name = "loginResult" extends = "struts-default" namespace = "/"> <Action name = "loginaction"> <resultado name = "sert" type = "redirect">/éxito.jsp </resultado> <resultado name = "Error"> Error.jsp </sur. type = "redirect">/login.jsp </ resultado> </solcion> <!-Código de verificación-> <Action name = "Validate"> <param name = "width"> 60 </amam> <param name = "height"> 20 </amam> <param name = "fontsize"> 18 </param> <param name = "codeLegument"> 4 </param> <resultado type = "stream"> <stream " name = "ContentType"> Image/jpeg </amam> <param name = "inputName"> inputStream </amam> </resultado> </action> </paquete> </struts>
LoginAction de clase de archivo de acción
paquete com.struts.action; import java.util.map; import javax.servlet.http.cookie; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; import org.apache.struts2.servletactionContext; import com.opensymphony.xwork2.ActionContex com.struts.util.desede; LoginAction de clase pública extiende ActionSupport {private static final Long SerialVersionUid = 6650955874307814247l; cadena privada f_loginname; cadena privada f_password; Respuesta privada httpservletResponse; solicitud privada de httpservletrequest; mapa privado <cadena, objeto> sesión; CookieUtils privado CookieUtils = new CookieUtils (); usuarios booleanos privados; cadena privada Validatecode; public static final String user_session = "user.session"; UserService UserService = New UserServiceImpl (); public String Autologin () lanza la excepción {request = servletactionContext.getRequest (); if (cookieUtils.getcookie (request, userservice)) {return "éxito"; } else return "inicio de sesión"; } @Override public String Execute () lanza la excepción {httpsession session = servletactionContext.getRequest (). GetSession (); intente {String Code = (String) Session.GetAttribute ("ValidateCode"); if (validateCode == null || devolver "error"; } if (f_loginname! = null &&! "". iguales (f_loginname) &&! "". Equals (f_password) && f_password! = null) {user user = userservice.login (f_loginname, f_password); // Determinar si se debe agregar a la cadena de cookie psswd = desede.decryptit (user.getf_password ()); if (user! = null && psswd.equals (f_password)) {if (usercookie) {cookie cookie = cookieUtils.addcookie (user); ActionContext.getContext (). Get ("Respuesta"); ServletactionContext.getResponse (). Addcookie (cookie); } session.SetAttribute (user_session, usuario); devolver "éxito"; }}} Catch (Exception e) {E.PrintStackTrace (); } return "inicio de sesión"; } // El usuario sale de public String logrout () {request = servletactionContext.getRequest (); respuesta = servletactionContext.getResponse (); Httpsession session = servletactionContext.getRequest (). GetSession (); sesión = request.getSession (falso); if (session! = null) session.removeAttribute (user_session); Cookie Cookie = CookieUtils.delcookie (solicitud); if (cookie! = null) respuesta.addcookie (cookie); devolver "Iniciar sesión"; } public static void main (string [] args) {loginAction login = new LoginAction (); Pruebe {Login.ExeCute (); } catch (Exception e) {E.PrintStackTrace (); }} MAP Public <String, Object> getSession () {Sesión de retorno; } public void setSession (map <string, object> session) {this.session = session; } public httpservletResponse getResponse () {Respuesta de retorno; } public void setResponse (httpservletResponse respuesta) {this.Response = respuesta; } public httpservletRequest getRequest () {solicitud de retorno; } public void setRequest (solicitud httpservletrequest) {this.request = request; } public boolean isusercookie () {return usercookie; } public void setusercookie (boolean usercookie) {this.usercookie = usercookie; } public String getf_loginName () {return f_loginname; } public void setf_loginname (string flogInName) {f_loginname = flogInName; } public String getF_Password () {return f_password; } public void setf_password (string fpassword) {f_password = fpassword; } public String getValidateCode () {return ValidAteCode; } public void setValidateCode (String ValidateCode) {this.validateCode = ValidateCode; }}ValidAcodeAction, muchos ejemplos de códigos de verificación en Internet, puede elegir su propia forma de escribir el código de verificación
paquete com.struts.action; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bufferedImage; import java.io.bytearrayinputputstream; import java.io.bytearrayputTream; import java.util.util. javax.imageio.stream.imageOutputStream; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionsUpport; public class ValidAtecodeAction extiende las acciones. privado bytearrayInputStream InputStream; Ancho privado int; Altura privada int; privado int fontSize; privado int codeLength; public ValidAteCodeAction () {} public void setcodeLength (int codeLength) {this.codelength = codeLength; } public void setFontSize (int fontSize) {this.fontSize = fontSize; } public void setheight (int altura) {this.height = altura; } public void setWidth (int width) {this.width = width; } public bytearrayInputStream getInputStream () {return inputStream; } public void setInputStream (bytearrayInputStream inputStream) {this.InputStream = inputStream; } public String Execute () lanza la excepción {bufferedImage bimage = new BufferedImage (ancho, altura, 1); Gráficos g = bimage.getGraphics (); Aleatorio aleatorio = new Random (); G.SetColor (GetRandomColor (Random, 200, 255)); G.Fillrect (0, 0, ancho, altura); G.SetFont (nueva fuente ("Times New Roman", 0, FontSize)); G.SetColor (GetRandomColor (Random, 160, 200)); para (int i = 0; i <155; i ++) {int x = random.nextint (ancho); int y = random.nextint (altura); int xl = random.nextint (12); int yl = random.nextint (12); G.Drawline (x, y, x + xl, y + yl); } StringBuffer str = new StringBuffer (); for (int i = 0; i <codeLength; i ++) {string randomstr = string.ValueOf (random.nextInt (10)); str.append (randomstr); G.SetColor (nuevo color (20 + Random.NextInt (110), 20 + Random .NextInt (110), 20 + Random.NextInt (110), 20 + Random.NextInt (110))); int x = (ancho / codeLength - 1) * i + random.nextint (ancho / (codeLength * 2)); int y = random.nextint (altura - fontSize) + fontSize; G.DrawString (Randomstr, X, Y); } ActionContext.getContext (). GetSession (). Put ("ValidateCode", str.ToString ()); G.Dispose (); BytearRayOutputStream output = new byteArRaRyOutputStream (); ImageOutputStream iout = imageIO.CreateEmageOutputStream (salida); Imageio.write (bimage, "jpeg", iout); Iout.close (); output.close (); ByteArrayInputStream in = new ByteArrayInputStream (output.tobytearray ()); setInputStream (in); devolver "éxito"; } Color privado getRandomColor (Random Random, Int Fc, Int BC) {if (fc> 255) fc = 255; if (BC> 255) BC = 255; int r = fc + random.nextint (bc - fc); int g = fc + random.nextint (BC - fc); int b = fc + random.nextint (bc - fc); devolver nuevo color (R, G, B); }}Iniciar sesión en la página de éxito Success.jsp
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%@ page import = "com.struts.util.cookieUtils"%> <%@ page import = "org.apache.commons.lang.xwork.stringutils"%> <%@ taglib uri = "/" struts-tuts-tuts-thags " prefix = "s"%> <%string path = request.getContextPath (); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title> Página de éxito </title> </head> <body> <% cookie [] cookies = request.getcookies (); if (cookies! = null) {for (cookie cookie: cookies) {if (cookieUtils.user_cookie.equals (cookie.getName ())) {string value = cookie.getValue (); // Determinar si el carácter está vacío if (stringUtils.isnotblank (valor)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; String Password = Spilled [1]; out.println (LoginName + "Bienvenido a iniciar sesión"); }}}}} %> <s: A Action = "LoginAction! Logout.Action" Namespace = "/"> Safe Exit </s: A> </body> </html>Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!