Introduit principalement des struts2 combinés avec des cookies pour obtenir une connexion automatique
Lors de la combinaison de Struts2 avec des cookies, vous devriez prêter attention à l'utilisation.
Package de pot de Struts2
Fichier de la base de données de liaison db.properties
dbdriver = oracle.jdbc.driver.oracledriverurl = jdbc: oracle: mince: @localhost: 1521: orclusername = testpassword = mot de passe
Code de couche DAO pour obtenir des informations utilisateur via le nom de connexion
Package com.struts.dao.impl; import java.sql.connection; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import com.struts.dao.Userdao; importation. UserDaOIMPl implémente UserDao {private beanConnection dbConn = new BeanConnection (); Public User Login (String LoginName) {Connection Conn = dbConn.getConnection (); ResultSet rs = null; String SelSQL = "SELECT * FROM T_SCOA_SYS_USER où f_loginname = '" + LoginName + "'"; //System.out.println(SELSQL); Préparé Pstmt = null; Utilisateur utilisateur = null; try {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_secreararyId (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 utilisateur; } public void Save (utilisateur utilisateur) {} public static void main (String [] args) {userdaoimpl daoimpl = new UserDaoimpl (); daoImpl.login ("admin"); }}Classe de cookieutils d'outil
package com.struts.util; import javax.servlet.http.cookie; import javax.servlet.http.httpServletRequest; Importer javax.servlet.http.httpSession; import org.apache.commons.lang.xwork.stringutils; Import Org.apache.strutts2.s.servletaccontext; 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 final string user_cookie = "user.cookie"; // ajouter cookie public cookie addcookie (utilisateur utilisateur) {cookie cookie = new cookie (user_cookie, user.getf_loginname () + "," + Dedede.decryptit (user.getf_password ())); cookie.setMaxage (60 * 60 * 24 * 365); retourner cookie; } // Obtenez Cookie Public Boolean Getcookie (demande httpservletRequest, userService 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 (); // déterminer si le caractère est vide if (stringUtils.isnotblank (value)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; String Motword = Spilled [1]; User user = userService.login (LoginName, mot de passe); if (user! = null) {httpSession session = request.getSession (); session .setAttribute (loginaction.user_session, utilisateur); // ajouter l'utilisateur à la session return true; }}}}} return false; } // Supprimer cookie public cookie delcookie (httpServLetRequest request) {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); retourner cookie; }} return null; }}Code de couche de service pour vérifier si le nom d'utilisateur et le mot de passe sont corrects. J'utilise localement l'algorithme de chiffrement et je dois être déchiffré. Les amis peuvent supprimer le mot de passe
Package com.struts.service.impl; import com.struts.dao.userdao; import com.struts.dao.impl.userdaoimpl; importer com.struts.proj.user; import com.struts.service.userservice; import com.struts.util.dedede; public useerservicempl UserDaOImpl (); Public User Login (String LoginName, String Motword) {User user = UserDao.Login (LoginName); if (user == null) {System.out.println ("Le nom d'utilisateur n'existe pas, veuillez vérifier et vous connecter à nouveau!"); } if (! Dedede.decryptit (user.getf_password ()). equals (mot de passe)) {System.out.println ("Erreur de mot de passe"); } return utilisateur; } public static void main (String [] args) {userServiceImpl useImp = new UserServiceImpl (); System.out.println (useimp.login ("admin", "1234")); }}Vérification du fichier de configuration Struts2.xml, CODE DE VÉRIFICATION DE LOGINACTION ET VALIDATECODEACTION DE STUTS2
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts public "- // APCAChe Software Foundation // Dtd Struts Configuration 2.1 // en" "http://struts.apache.org/dtds/struts-2.1.dtd"> <strutS> <Constante Name = "StrUts.i18n.Reload =" STRUTS> <" /> <constante name = "struts.devmode" value = "true" /> <package name = "LoginResult" extends = "struts-default" namespace = "/"> <action name = "Loginaction"> <result name = "Success" type = "redirect"> type = "redirect"> / login.jsp </ result> </ action> <! - Code de vérification -> <action name = "validate"> <param name = "width"> 60 </ param> <param name = "height"> 20 </ param> <param name = "FonTSize"> 18 </ param> <param name = "Codelonging"> 4 </ param> <Sult Type = "Stream"> <param name = "contentType"> image / jpeg </ param> <param name = "inputName"> inputStream </ param> </ result> </ action> </ package> </ struts>
Loginaction de classe de fichiers d'action
package com.struts.action; import java.util.map; import javax.servlet.http.cookie; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpSession; import; org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.actionContext; import com.opensymphony.xwork2.actsupport; import com.struts.proj.user; import com.struts.service.uservice; import com.struls.service.impl.userviceIMPL; import com.strut.utilco com.struts.util.desede; La connexion de classe publique étend ActionSupport {private statique final SerialVersionUID = 6650955874307814247l; chaîne privée f_loginname; chaîne privée f_password; Réponse privée HttpServletResponse; demande privée httpsservletRequest; Map privé <chaîne, objet> session; cookieutils privés cookieutils = nouveau cookieutils (); Boolean UserCookie privé; chaîne privée validatecode; public static final String user_Session = "user.Session"; UserService userService = new UserServiceImpl (); public String Autologin () lève une exception {request = servletActionContext.getRequest (); if (cookieUtils.getcookie (request, userService)) {return "succès"; } else return "connexion"; } @Override public String execute () lève une exception {httpSession session = servletActionContext.getRequest (). GetSession (); try {String code = (string) session.getAttribute ("validatecode"); if (validateCode == null ||! validateCode.equals (code)) {System.out.println ("Le code de vérification est incorrectement entré, veuillez le saisir correctement"); return "erreur"; } if (f_loginname! = null &&! "". equals (f_loginname) &&! "". Equals (f_password) && f_password! = null) {user user = userservice.login (f_loginname, f_password); // Déterminez s'il faut ajouter à la chaîne de cookie pSSWD = Dedede.decryptit (user.getf_password ()); if (user! = null && psswd.equals (f_password)) {if (userRookie) {cookie cookie = cookieutils.addcookie (user); ActionContext.getContext (). Get ("réponse"); ServletActionContext.getResponse (). Addcookie (cookie); } session.setAttribute (user_session, utilisateur); retourner le "succès"; }}} catch (exception e) {e.printStackTrace (); } return "connexion"; } // L'utilisateur quitte la chaîne publique Logout () {request = servletActionContext.getRequest (); réponse = servletActionContext.getResponse (); HttpSession session = servletActionContext.getRequest (). GetSession (); session = request.getSession (false); if (session! = null) session.reMoveAtTribute (user_Session); Cookie Cookie = Cookieutils.delcookie (demande); if (cookie! = null) réponse.addcookie (cookie); return "connexion"; } public static void main (String [] args) {loginAction login = new LoginAction (); essayez {login.execute (); } catch (exception e) {e.printStackTrace (); }} public map <string, object> getSession () {return session; } public void setSession (map <string, object> session) {this.Session = session; } public httpservletResponse getResponse () {return réponse; } public void setResponse (HttpServletResponse Response) {this.Response = Response; } public httpServLetRequest getRequest () {return request; } public void setRequest (httpsservletRequest request) {this.request = request; } public boolean iSuserCookie () {return userRookie; } 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, de nombreux exemples de codes de vérification sur Internet, vous pouvez choisir votre propre façon d'écrire le code de vérification
package com.struts.action; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bufferedImage; import java.io.bytearrayinputStream; import java.io.bytearrayoutStream; import java.utitil.random; javax.imageio.imageio; import javax.imageio.stream.imageOutputStream; import com.opensymphony.xwork2.actionContext; import com.opensymphony.xwork2.actsupport; classe publique validatecodeAction étend des actions ActionSupport {privé statique final final SerialversionUid = 1l; ByteArrayInputStream inputStream privé; largeur int privée; Hauteur d'int privé; Int privé FontSize; private int CodeLength; public validatecodeAction () {} public void setCodeLength (int CodeLength) {this.codeLength = CodeLength; } public void setFontsize (int fonSSIZE) {this.fontsize = FonTSize; } public void Setheight (int height) {this.height = height; } public void setWidth (int largeth) {this.width = width; } public bytearrayInputStream getInputStream () {return inputStream; } public void setInputStream (bytearrayInputStream inputStream) {this.inputStream = inputStream; } public String execute () lève l'exception {BufferedImage bimage = new BufferedImage (largeur, hauteur, 1); Graphiques g = bimage.getGraphics (); Aléatoire aléatoire = nouveau aléatoire (); g.setColor (getrandomcolor (aléatoire, 200, 255)); G.Fillrect (0, 0, largeur, hauteur); g.setfont (new Font ("Times New Roman", 0, FonTSize)); g.setColor (getrandomcolor (aléatoire, 160, 200)); pour (int i = 0; i <155; i ++) {int x = random.nextint (largeur); int y = random.nextint (hauteur); 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 (nouvelle couleur (20 + random.nextint (110), 20 + random .Nextint (110), 20 + random.nextint (110), 20 + random.nextint (110))); int x = (width / codelngth - 1) * i + random.nextint (width / (codelngth * 2)); int y = random.nextint (hauteur - FontSize) + FonTSize; G.Drawstring (Randomstr, x, y); } ActionContext.getContext (). Getession (). Put ("validatecode", str.toString ()); g.dispose (); ByteArrayOutputStream output = new ByteArrayOutputStream (); ImageOutputStream iout = imageo.CreateImageOutputStream (sortie); Imageo.write (bimage, "jpeg", iout); iout.close (); output.close (); ByteArrayInputStream dans = new ByteArrayInputStream (output.ToByTearray ()); setInputStream (in); retourner le "succès"; } Couleur privée getrandomColor (aléatoire aléatoire, 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); retourner une nouvelle couleur (r, g, b); }}Page de réussite de connexion Success.jsp
<% @ page Language = "Java" import = "java.util. *" pageencoding = "utf-8"%> <% @ page import = "com.struts.util.cookieutils"%> <% @ page import = "org.apache.commons.lang.xwork.stringUtils"%> <% @ taglib uri = "/ struts-tags" 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> <Title> Page de réussite </TITAL> </ head> <body> <% cookie [] cookies = request.getcookies (); if (cookies! = null) {for (cookie cookie: cookies) {if (cookieutils.user_cookie.equals (cookie.getName ())) {string value = cookie.getValue (); // déterminer si le caractère est vide if (stringUtils.isnotblank (value)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; String Motword = Spilled [1]; out.println (LoginName + "Bienvenue pour se connecter"); }}}}}}%> <s: a action = "Loginaction! Logout.action" namespace = "/"> SAFE SOIT </ s: a> </body> </html>Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!