Fördert hauptsächlich Struts2 kombiniert mit Cookies, um eine automatische Anmeldung zu erreichen
Wenn Sie Struts2 mit Cookies kombinieren, sollten Sie auf die Verwendung von Aktionen achten, um das Cookie -Lesen zu realisieren
Struts2's JAR -Paket
LINK -Datenbankdatei DB.Properties verlinken
dbdriver = oracle.jdbc.driver.oracledriverurl = jdbc: oracle: dünn: @LocalHost: 1521: orclusername = testPassword = Passwort
DAO -Layer -Code, um Benutzerinformationen über Anmeldenamen zu erhalten
Paket com.struts.dao.impl; Import Java.sql.Connection; Import Java.Sql.PrepararedStatement; Import Java.sql.resultset; Import Java.sql.sqLexception; Import Com.struts.dao.userdao; UserDaoImpl implementiert userDao {private beanconnection dbconn = new BeanConnection (); public user login (String loginName) {Verbindung conn = dbconn.getConnection (); ResultSet rs = null; String selsql = "Select * aus t_scoa_sys_user wobei f_loginname = '"+loginname+"'" "; //System.out.println(SELSQL); PrepedStatement pstmt = null; User user = 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_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 (); } Rückgabe des Benutzers; } public void save (Benutzer Benutzer) {} public static void main (String [] args) {userDaOImpl daoImpl = new UserDaOImpl (); daoimpl.login ("admin"); }}Werkzeug CookieUtils Klasse
Paket com.struts.util; import Javax.servlet.http.cookie; import Javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpSession; importieren org.apache.commons.lang.xwork.stringutils; com.struts.action.loginaction; import com.strutss.proj.user; import com.struts.service.userservice; import com.struts.service.impl.UserServiceImpl; öffentliche Klassen -Cookieutils {public static endgültige String user_cookie = "user.cookie"; // Cookie public Cookie hinzufügen addcookie (Benutzerbenutzer) {cookie cookie = new Cookie (user_cookie, user.getf_loginName () + "," + Dese.decryptit (user.getf_password ())); Cookie.SetMaxage (60 * 60 * 24 * 365); Kekse zurückgeben; } // Cookie public boolean getcookie (httpServletRequest -Anforderung, UserService UserService) {Request = ServletActionContext.getRequest (); Cookie [] Cookies = Request.GetCookies (); userService = new UserServiceImpl (); if (cookies! // Bestimmen Sie, ob das Zeichen leer ist, wenn (Stringutils.isnotblank (value)) {string [] übersputet = value.split (","); String loginName = verschüttet [0]; String password = verschüttet [1]; User user = userService.login (LoginName, Passwort); if (user! = null) {httpSession Session = Request.GetSession (); Sitzung .SetatTribute (loginAction.user_Session, Benutzer); // Benutzer zur Sitzungsrückgabe true; }}}}} return false; } // Cookie public Cookie delcookie (httpServletRequest -Anforderung) {Request = servletActionContext.getRequest (); Cookie [] Cookies = Request.GetCookies (); if (Cookies! Cookie.SetMaxage (0); Kekse zurückgeben; }} return null; }}Service Layer -Code, um zu überprüfen, ob der Benutzername und das Kennwort korrekt sind. Ich benutze den Verschlüsselungsalgorithmus lokal und muss entschlüsselt werden. Freunde können das Passwort entfernen
Paket com.strutss.service.impl; import com.struts.dao.userdao; import com.struts.dao.impl.userdaoImpl; com.struts.proj.user; import com.struts.Service.Userservice; userdrats. UserDaoImpl (); öffentliche Benutzeranmeldung (String -LoginName, String -Passwort) {user user = userDao.login (LoginName); if (user == null) {System.out.println ("Der Benutzername existiert nicht, prüfen und melden Sie sich erneut an!"); } if (! Desede.decryptit (user.getf_password ()). Equals (Passwort)) {System.out.println ("Kennwortfehler"); } Rückgabe des Benutzers; } public static void main (String [] args) {UserServiceImPl useImp = new UserServiceImpl (); System.out.println (usep..login ("admin", "1234"); }}Überprüfung der Konfigurationsdatei Struts2.xml, Anmeldung und ValidateCodeAction -Überprüfungscode von STRUTS2
<? /> <Constant name = "stolzs.DevMode" value = "true"/> <package name = "loginResult" extends = "struts-Default" namespace = "/"> <actionname = "loginAction"> <Ergebnisname = "Erfolg" type "type". type="redirect">/login.jsp</result> </action> <!-- Verification code--> <action name="validate"> <param name="width">60</param> <param name="height">20</param> <param name="fontSize">18</param> <param name="codeLength">4</param> <result type="stream"> <param name = "contentType"> Image/jpeg </param> <param name = "inputName"> inputStream </param> </result> </action> </package> </struts>
Loginaktion der Aktion Dateiklasse
package 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.servletactactactacontext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.actionsupport; import com.struts.proj.user; Com.struts.util.Desede; LoginAction für öffentliche Klasse erweitert die Aktionssuche {private statische endgültige lange Serialversionuid = 6650955874307814247L; private String f_logInname; private Zeichenfolge f_password; private httpServletResponse -Antwort; private httpServletRequest -Anfrage; private map <String, Objekt> Sitzung; private CookieUtils CookieUtils = new CookieUtils (); private boolesche UserCookie; private String validateCode; public static final String user_session = "user.Session"; UserService userService = new UserServiceImpl (); public String autologin () löst Ausnahme aus {request = servletActActionContext.getRequest (); if (cookieUtils.getCookie (Anfrage, UserService)) {return "Erfolg"; } sonst return "login"; } @Override public String execute () löst eine Ausnahme aus {httpSession session = servletActionContext.getRequest (). GetSession (); try {string code = (string) session.getAttribute ("validateCode"); if (validateCode == null ||! validateCode.equals (Code)) {System.out.println ("Der Verifizierungscode wird falsch eingegeben, bitte geben Sie es richtig ein"); "Fehler" zurückgeben; } if (f_logInname! // Bestimmen Sie, ob Sie zum Cookie -String psswd = Dese.decryptit (user.getf_password ()) hinzugefügt werden sollen; if (user! ActionContext.getContext (). Get ("Antwort"); ServletActionContext.getResponse (). AddoCookie (Cookie); } session.setAttribute (user_Session, user); zurück "Erfolg"; }}} catch (exception e) {e.printstacktrace (); } return "login"; } // Der Benutzer beendet die öffentliche String -logout () {request = servletActionContext.getRequest (); response = servletActionContext.getResponse (); HttpSession Session = ServletActionContext.getRequest (). GetSession (); Session = Request.GetSession (false); if (session! = null) session.removeAttribute (user_sesion); Cookie Cookie = CookieUtils.delcookie (Anfrage); if (Cookie! = NULL) Antwort.Addcookie (Cookie); Rückgabe "Login"; } public static void main (string [] args) {loginAction login = new LoginAction (); try {login.execute (); } catch (Ausnahme e) {e.printstacktrace (); }} public map <string, Object> getSession () {return session; } public void setSession (map <String, Objekt> Sitzung) {this.Session = session; } public httpServletResponse getResponse () {Rückgabeantwort; } public void setResponse (httpServletResponse -Antwort) {this.Response = Antwort; } public httpServletRequest getRequest () {Rückgabeanforderung; } public void setRequest (httpServletRequest -Anforderung) {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, viele Beispiele für Verifizierungscodes im Internet. Sie können Ihren eigenen Weg auswählen, um den Verifizierungscode zu schreiben
Paket com.struts.action; import Java.awt.color; import Java.awt.font; Import Java.awt.graphics; Import Java.awt.image.BuffeedImage; javax.imageo.stream.imageOutputStream; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.actionsupport; public class validateCodeAction erweitert die AKTIONSUPPORT {private statische endgültige lange Serialversionuid = 1L; private bytearrayinputStream InputStream; private intbreite; private int Höhe; private int fontsize; private int codelength; public validateCodeAction () {} public void setCodelength (int codelength) {this.codelength = codelength; } public void setfontsize (int fontSize) {this.fontSize = fontSize; } public void setheight (int Höhe) {this.height = Höhe; } public void setwidth (int width) {this.width = width; } public bytearrayInputStream getInputStream () {return InputStream; } public void setInputStream (BytearrayInputStream InputStream) {this.inputStream = InputStream; } public String execute () löst Ausnahme aus {bufferedImage bimage = new bufferedImage (width, Höhe, 1); Grafik g = bimage.getGraphics (); Random random = new random (); G.SetColor (getRandomcolor (Random, 200, 255)); G.FillRect (0, 0, Breite, Höhe); G.SetFont (neue Schriftart ("Times New Roman", 0, fontsize)); G.SetColor (GetRandomcolor (Random, 160, 200)); für (int i = 0; i <155; i ++) {int x = random.nextint (width); int y = random.nextint (Höhe); int xl = random.nextint (12); int yl = random.nextint (12); g.drawline (x, y, x + xl, y + yl); } StringBuffer str = new StringBuffer (); für (int i = 0; i <codelength; i ++) {String randomStr = string.ValueOf (random.nextint (10)); Str.Append (Randomstr); G.SetColor (neue Farbe (20 + random.Nextint (110), 20 + Random .Nextint (110), 20 + Random.Nextint (110), 20 + Random.Nextint (110))); int x = (width / codelength - 1) * i + random.nextint (width / (codelength * 2)); int y = random.Nextint (Höhe - fontsize) + fontsize; g.drawstring (randomstr, x, y); } ActionContext.getContext (). GetSession (). Put ("validateCode", Str.ToString ()); g.disponse (); BytearrayoutputStream output = new bytearrayoutputStream (); ImageOutputStream iout = imageio.createimageOutputStream (Ausgabe); Imageio.Write (Bimage, "JPEG", iout); iout.close (); output.close (); BytearrayInputStream in = new bytearrayInputStream (output.tobytearray ()); setInputStream (in); zurück "Erfolg"; } private Farbe getrandomcolor (zufällig, 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); Neue Farbe zurückgeben (r, g, b); }}Login Success Page Success.jsp
<%@ page Language = "java" import = "java.util. Präfix = "S"%> <%String path = request.getContextPath (); String basepath = request.getScheme () + ": //" + request.getSerVername () + ":" + request.getServerport () + Pfad + "/";%> <! DocType html public "-// w3c // dtd html 4,01 tranitional // EN"> <html> <html> <html> <html> <html> <html> <html> <html> <html> <pace> <html> <pace> <html> <pace> <html> <- <title> Erfolgsseite </title> </head> <body> <% Cookie [] Cookies = Request.getCookies (); if (cookies! // Bestimmen Sie, ob das Zeichen leer ist, wenn (Stringutils.isnotblank (value)) {string [] übersputet = value.split (","); String loginName = verschüttet [0]; String password = verschüttet [1]; out.println (LoginName + "Willkommen zum Anmelden"); }}}}} %> <s: a action = "loginAction! logout.action" Namespace = "/"> Safe Exit </s: a> </body> </html>Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!