Terutama memperkenalkan struts2 yang dikombinasikan dengan cookie untuk mencapai login otomatis
Saat menggabungkan struts2 dengan cookie, Anda harus memperhatikan penggunaan. Tindakan aksi untuk mewujudkan bacaan cookie
Paket Jar Struts2
Link Database File DB.Properties
dbdriver = oracle.jdbc.driver.oracledriverurl = jdbc: oracle: tipis: @localhost: 1521: orclusername = testpassword = kata sandi
Kode Lapisan DAO untuk mendapatkan informasi pengguna melalui nama login
Paket com.struts.dao.impl; impor java.sql.connection; impor java.sql.preparedstatement; impor java.sql.resultset; impor java.sql.sqlexception; import com.struts.dao.userdao; impor com.struGut. UserdaoImpl mengimplementasikan userdao {private beanconnection dbconn = beanConnection baru (); Login Pengguna Publik (String LoginName) {Connection Conn = DBConn.GetConnection (); Hasil rs = null; String selsql = "SELECT * DARI T_SCOA_SYS_USER di mana f_loginname = '"+LoginName+"'"; //System.out.println(selsql); PSTMT Persiapan PSTMT = NULL; Pengguna pengguna = null; coba {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 (); } mengembalikan pengguna; } public void save (pengguna pengguna) {} public static void main (string [] args) {userdaoImpl daoImpl = new userdaoImpl (); daoimpl.login ("admin"); }}Kelas alat cookieutils
Paket com.struts.util; import javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import orgache.commons.servlet.xwork.stringexs; com.struts.action.loginaction; import com.struts.proj.user; import com.struts.service.userservice; import com.struts.service.impl.userserviceImpl; cookie cookieutils public {public static string final user_cookie = "user.cookie"; // Tambahkan cookie cookie publik addCookie (pengguna pengguna) {cookie cookie = cookie baru (user_cookie, user.getf_loginname () + "," + desede.decryptit (user.getf_password ())); cookie.setmaxage (60 * 60 * 24 * 365); Kembali Cookie; } // Dapatkan cookie public boolean getCookie (permintaan httpservletRequest, UserserService Userservice) {request = servletActionContext.getRequest (); Cookie [] cookies = request.getCookies (); Userservice = UserServerImploImpl () baru; if (cookies! = null) {for (cookie cookie: cookies) {if (cookieutils.user_cookie.equals (cookie.getname ())) {string value = cookie.getValue (); // Tentukan apakah karakternya kosong jika (stringutils.isnotblank (value)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; Kata sandi string = tumpah [1]; Pengguna pengguna = UsserService.login (LoginName, Kata Sandi); if (user! = null) {httpsession session = request.getSession (); sesi .setAttribute (LoginAction.User_Session, pengguna); // Tambahkan pengguna ke sesi Return true; }}}}} return false; } // hapus cookie cookie 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); Kembali Cookie; }} return null; }}Kode Layanan Layanan Untuk memverifikasi apakah nama pengguna dan kata sandi sudah benar. Saya menggunakan algoritma enkripsi secara lokal dan perlu didekripsi. Teman dapat menghapus kata sandi
Paket com.struts.service.impl; import com.struts.dao.userdao; import com.struts.dao.impl.userdaoImpl; import com.struts.proj.user; import com.struts.service.userservice; impor com.struts.util.desede; public classerService.userService; impor com.struts.util.desede; Public Classer UserdaoImpl (); Login Pengguna Publik (String LoginName, Kata Sandi String) {User User = Userdao.Login (LoginName); if (user == null) {System.out.println ("Nama pengguna tidak ada, silakan periksa dan masuk lagi!"); } if (! desede.decryptit (user.getf_password ()). sama (kata sandi)) {system.out.println ("kesalahan kata sandi"); } mengembalikan pengguna; } public static void main (string [] args) {UserserViceImpl useimp = new UserServiceImpl (); System.out.println (Useimp.login ("Admin", "1234")); }}Verifikasi File Konfigurasi Struts2.xml, LoginAction dan ValidateCodeAction Verifikasi Kode Struts2
<? Xml Version = "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.dtd"> <puts> "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" aTREAD.RUBOAD. "" " <name konstan = "struts.devMode" value = "true"/> <package name = "loginResult" extends = "struts-default" namespace = "/"> <action name = "loginaction"> <name = "success" type = "redirect">/success.jsp </hasil </hasil name = ">"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT"> "DESRORT. 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"> JPEG </param> <param name = "inputName"> inputStream </param> </rence> </ action> </packing> </struts>
Loginaksi Kelas File Tindakan
Paket com.struts.action; import java.util.map; import javax.servlet.http.cookie; import javax.servlet.http.httpservletRequest; import javax.servlet.htp.httpservletResponse; impor javax.servlet org.apache.struts2.servletActionContext; import com.opensymphony.xwork2.actionContext; import com.opensymphony.xwork2.actionsupport; import com.struts.proj.user; impor com.struts.service.userservice; impor com.struts.service.userserser.service.userservice; impor com.struts.service.userserser.service.userService; impor com.struts.service.userserser.service.userservice; Impor Com.struts.service.Umers.Imerser.service.userService; com.struts.util.desede; Loginaksi kelas publik memperluas ActionSupport {private static final long serialversionuid = 6650955874307814247l; Private String f_loginname; Private String f_password; respons httpservletResponse pribadi; permintaan httpservletrequest pribadi; Sesi peta pribadi <String, Object>; cookieutils private cookieutils = cookieutils baru (); Private Boolean Usercookie; Private String ValidateCode; Public Static Final String user_session = "user.Session"; UserserService Userservice = baru UserserServiceImpl (); Public String AutOLOGIN () melempar Exception {request = servletActionContext.getRequest (); if (cookieutils.getCookie (request, userservice)) {return "success"; } lain mengembalikan "login"; } @Override Public String execute () melempar Exception {httpsession sesi = servletActionContext.getRequest (). GetSession (); coba {string code = (string) session.getAttribute ("validateCode"); if (validateCode == null ||! validateCode.equals (kode)) {System.out.println ("Kode verifikasi dimasukkan secara tidak benar, silakan masukkan dengan benar"); mengembalikan "kesalahan"; } if (f_loginname! = null &&! "". Equals (f_loginname) &&! " // Tentukan apakah akan menambahkan ke string cookie psswd = desede.decryptit (user.getf_password ()); if (user! = null && psswd.equals (f_password)) {if (usercookie) {cookie cookie = cookieutils.addcookie (user); ActionContext.getContext (). Get ("response"); ServletActionContext.getResponse (). AddCookie (cookie); } session.setAttribute (user_session, user); mengembalikan "kesuksesan"; }}} catch (Exception e) {e.printstacktrace (); } return "Login"; } // pengguna keluar dari string logout publik () {request = servletActionContext.getRequest (); respons = servletActionContext.getResponse (); Httpsession sesi = servletActionContext.getRequest (). GetSession (); session = request.getSession (false); if (sesi! = null) session.removeattribute (user_session); Cookie cookie = cookieutils.delcookie (permintaan); if (cookie! = null) response.addcookie (cookie); mengembalikan "login"; } public static void main (string [] args) {loginaction login = loginAction baru (); coba {login.execute (); } catch (Exception e) {E.PrintStackTrace (); }} peta publik <string, objek> getSession () {return sesi; } public void setSession (peta <String, Object> sesi) {this.Session = sesi; } public httpservletResponse getResponse () {return response; } public void setResponse (respons httpservletResponse) {this.response = respons; } public httpservletRequest getRequest () {request return; } public void setRequest (permintaan 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, banyak contoh kode verifikasi di internet, Anda dapat memilih cara Anda sendiri untuk menulis kode verifikasi
Paket com.struts.action; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; impor java.awt.image.bufferedimage; impor java.io.bytearrayinputStream; impor java.io.bytearrayoutstream; javax.imageio.imageio; import javax.imageio.stream.imageoutputStream; impor com.opensymphony.xwork2.actionContext; impor com.opensymphony.xwork2.actionsupport; kelas publik validateCodeAction memperluas ActionSupport {private static static long serialversionuid = 1 long; inputStream private bytearrayInputStream; Lebar int pribadi; Tinggi int pribadi; fontsize int pribadi; 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 tinggi) {this.height = tinggi; } public void setWidth (int lebar) {this.width = width; } public bytearrayInputStream getInputStream () {return inputStream; } public void setInputStream (bytearrayInputStream inputStream) {this.inputStream = inputStream; } public String execute () melempar Exception {bufferedImage bimage = new bufferedImage (lebar, tinggi, 1); Grafik g = bimage.getGraphics (); Acak acak = acak baru (); G.SetColor (getRandomColor (acak, 200, 255)); g.fillrect (0, 0, lebar, tinggi); g.setfont (font baru ("Times New Roman", 0, fontsize)); G.SetColor (getRandomColor (acak, 160, 200)); untuk (int i = 0; i <155; i ++) {int x = random.nextInt (lebar); int y = random.nextInt (tinggi); int xl = random.nextInt (12); int yl = random.nextInt (12); G.Drawline (x, y, x + xl, y + yl); } StringBuffer str = new StringBuffer (); untuk (int i = 0; i <codelength; i ++) {string randomstr = string.valueof (random.nextInt (10)); str.Append (randomstr); g.setColor (warna baru (20 + random.nextInt (110), 20 + random .nextint (110), 20 + acak.nextint (110), 20 + acak.nextint (110)))); int x = (lebar / codelength - 1) * i + random.nextInt (lebar / (codelength * 2)); int y = random.nextInt (tinggi - fontSize) + fontSize; g.drawstring (randomstr, x, y); } ActionContext.getContext (). GetSession (). Put ("validateCode", str.toString ()); g.dispose (); BytearrayoutputStream output = new bytearrayoutputStream (); ImageOutputStream iout = Imageo.CreateMageOutputStream (output); Imageo.write (bimage, "jpeg", iout); iout.close (); output.close (); BytearrayInputStream in = new ByteArrayInputStream (output.tobyteArray ()); setInputStream (IN); mengembalikan "kesuksesan"; } Private Color getRandomColor (acak acak, 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); mengembalikan warna baru (r, g, b); }}Login Success Page Success.jsp
<%@ page language = "java" import = "java.util.*" pageCoding = "UTF-8"%> <%@ page impor = "com.struts.util.cookieutils"%> <%@ page impor = "org.apache.commons.lang.xwork.stringutils"%@ tag 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>success halaman </iteme> </head> <body> <% cookie [] cookies = request.getCookies (); if (cookies! = null) {for (cookie cookie: cookies) {if (cookieutils.user_cookie.equals (cookie.getname ())) {string value = cookie.getValue (); // Tentukan apakah karakternya kosong jika (stringutils.isnotblank (value)) {string [] spilled = value.split (","); String LoginName = Spilled [0]; Kata sandi string = tumpah [1]; out.println (LoginName + "Welcome To Log In"); }}}}} %> <S: A Action = "LoginAction! Logout.action" namespace = "/"> Exit aman </s: a> </body> </html>Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!