主にStruts2をCookieと組み合わせて導入して、自動ログインを実現します
Struts2とCookieを組み合わせるときは、Cookieの読み取りを実現するために使用の使用に注意する必要があります。
Struts2のJARパッケージ
データベースファイルdb.propertiesをリンクします
dbdriver = oracle.jdbc.driver.oracledriverurl = jdbc:oracle:thin:@localhost:1521:orclusername = testpassword =パスワード
ログイン名を介してユーザー情報を取得するDAOレイヤーコード
パッケージ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; userdaoimplを実装しているuserdao {private beanconnection dbconn = new beanconnection(); public user login(string loginname){connection conn = dbconn.getConnection();結果rs = null; string selsql = "select * from t_scoa_sys_user where f_loginname = '"+loginname+"'"; //system.out.println(selsql); predtatement pstmt = null;ユーザーユーザー= 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(); } return user; } public void save(user user){} public static void main(string [] args){userdaoimpl daoimpl = new userdaoimpl(); daoimpl.login( "admin"); }}Tool Cookieutilsクラス
パッケージcom.struts.util; import javax.servlet.http.cookie; Import javax.servlet.http.httpservletrequest; Import javax.servlet.http.httssession; import org.apache.commons.lang.xwark.stringutils; comporce.struts2.struts2.struts2.struttils; com.struts.action.loginaction; Import com.struts.proj.user; Import com.struts.service.userservice; Import com.struts.service.impl.userserviceimpl; public static final string user_cookie = "user.cookie"; // Cookie public cookie addcookie(user user){cookie cookie = new cookie(user_cookie、user.getf_loginname() + "、" + desede.decryptit(user.getf_password())); cookie.setmaxage(60 * 60 * 24 * 365);クッキーを返す; } // Cookie public boolean getcookie(httpservletrequest request、userservice userservice){request = servletactionContext.getRequest(); cookie [] cookie = request.getCookies(); userservice = new userserviceimpl(); if(cookies!= null){for(cookie cookie:cookie){if(cookieutils.user_cookie.equals(cookie.getname())){string value = cookie.getValue(); //文字が空であるかどうかを判断string loginname = spilled [0];文字列パスワード=こぼれ[1]; user user = userservice.login(loginname、password); if(user!= null){httpsession session = request.getSession(); session .setattribute(loginaction.user_session、user); //セッションにユーザーを追加してtrueを返します。 }}}}} falseを返します。 } //削除Cookie public cookie delcookie(httpservletrequest request){request = servletactionContext.getRequest(); cookie [] cookie = request.getCookies(); if(cookies!= null){for(cookie cookie:cookie){if(user_cookie.equals(cookie.getname())){cookie.setValue( ""); cookie.setmaxage(0);クッキーを返す; }} nullを返します。 }}サービスレイヤーコードユーザー名とパスワードが正しいかどうかを確認します。暗号化アルゴリズムをローカルで使用しているため、復号化する必要があります。友達はパスワードを削除できます
com.struts.service.impl; Import com.struts.dao.userdao;インポートcom.struts.dao.impl.userdaoimpl;インポートcom.struts.proj.user; import com.struts.service.serservice; Import com.struts.util.desede; public userimpleplmplermentユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーユーザーuserdaoimpl(); public user login(string loginname、string password){user user = userdao.login(loginname); if(user == null){system.out.println( "ユーザー名は存在しません。もう一度チェックしてログインしてください!"); } if(!desede.decryptit(user.getf_password())。 } return user; } public static void main(string [] args){userserviceimpl useimp = new userserviceimpl(); system.out.println(useimp.login( "admin"、 "1234")); }}構成ファイルの検証Struts2.xml、Loginaction、およびvalidAteCodeactionの検証コードStruts2
<?xml version = "1.0" encoding = "utf-8"?> <!doctype struts public " - // apacheソフトウェア財団// dtd struts構成/> <constant name = "struts.devmode" value = "true"/> <package name = "loginResult" extends = "struts-default" namespace = "/"> <action name = "loginaction"> <result name = "success" type = "redirect">/success.jsp </result name = <result name " type = "Redirect">/login.jsp </result> </action> <! - visifilification code-> <action name = "validate"> <param name = "width"> 60 </param> <param name = "heigh"> 20 </param> <param> <fontsize "> 18 </param> <param"> 4 </param> <param> <param "> name = "contentType"> image/jpeg </param> <param name = "inputname"> inputstream </param> </result> </action> </package> </struts>
アクションファイルクラスのログニクション
パッケージ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.htptpssossioss; org.apache.struts2.servletactionContext;インポートcom.opensymphony.xwork2.actioncontext; Import com.opensymphony.xwork2.actionsupport; Import com.struts.proj.user; Import com.struts.service.userservice; Import com.strut.srut.srut.sserserviceimpl; com.struts.util.cookieutils; Import com.struts.util.desede; public class loginactionはactionsupportを拡張します{private static final long serialversionuid = 6650955874307814247l;プライベート文字列f_loginname;プライベート文字列f_password;プライベートHTTPSERVLETRESPONSE応答。プライベートhttpservletrequestリクエスト。プライベートマップ<文字列、オブジェクト>セッション; private cookieutils cookieutils = new cookieutils();プライベートブールユーザークーキー。プライベート文字列elibalatecode; public static final string user_session = "user.session"; userservice userservice = new userserviceimpl(); public string autologin()throws exception {request = servletactionContext.getRequest(); if(cookieutils.getcookie(request、userservice)){return "success"; } else "login"を返します。 } @Override public string execute()スロー例外{httpsession session = servletactioncontext.getRequest()。getSession(); try {string code =(string)session.getAttribute( "validatecode"); if(validAtecode == null ||!validAtecode.equals(code)){system.out.println( "検証コードは誤って入力されます。正しく入力してください"); 「エラー」を返します。 } if(f_loginname!= null &&! ""。equals(f_loginname)&&! ""。equals(f_password)&& f_password!= null){user user = userservice.login(f_loginname、f_password); // cookie stringに追加するかどうかを決定する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); 「成功」を返します。 }}} catch(例外e){e.printstacktrace(); } "login"を返します。 } //ユーザーはpublic string logout(){request = servletactionContext.getRequest(); Response = servletactionContext.getResponse(); httpsession session = servletactioncontext.getRequest()。getSession(); session = request.getSession(false); if(session!= null)session.removeattribute(user_session); Cookie cookie = cookieutils.delcookie(リクエスト); if(cookie!= null)response.addcookie(cookie); 「ログイン」を返します。 } public static void main(string [] args){loginaction login = new loginaction(); {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 Response; } public void setResponse(httpservletResponse応答){this.response = response; } public httpservletrequest getRequest(){return request; } public void setRequest(httpservletrequest request){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 balidatecode){this.validatecode = validAtecode; }}validAcodeaction、インターネット上の検証コードの多くの例は、検証コードを書くための独自の方法を選択できます
パッケージcom.struts.action; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bufferedimage; import java.io.impted java.io.import java.io.io.bytearrayutputStream; import java.util.util.util.util.util.util.util.util.util.util.util.util.util.util.util.till.util.util.random; javax.imageio.imageio; Import javax.imageio.stream.imageoutputStream; Import com.opensymphony.xwork2.actionContext; Import com.opensymphony.xwork2.actionsupport; public class validatecodeactionはactionsupport {private static final rong serialsionuid = 1l; private bytearrayinputStream inputstream;プライベートインクト幅;プライベートINT高さ; 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 height){this.height = height; } public void setWidth(int width){this.width = width; } public bytearrayinputStream getInputStream(){return inputstream; } public void setInputStream(bytearrayinputStream inputstream){this.inputStream = inputstream; } public string execute()スロー例外{bufferedimage bimage = new bufferedimage(width、height、1);グラフィックg = bimage.getgraphics(); RANDOM RANDOM = new Random(); G.SetColor(getRandomColor(ランダム、200、255)); G.FillRect(0、0、幅、高さ); g.setFont(new Font( "Times New Roman"、0、fontsize)); G.SetColor(getRandomColor(ランダム、160、200)); for(int i = 0; i <155; i ++){int x = random.nextint(width); int y = random.nextint(height); 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(randomsstr); g.setColor(新しい色(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(height -fontsize) + fontsize; G.DrawString(Randomstr、X、Y); } actionContext.getContext()。getSession()。put( "validatecode"、str.tostring()); g.dispose(); bytearrayoutputStream output = new bytearrayoutputStream(); ImageOutputStream iout = imageio.createimageOutputStream(output); Imageio.write(bimage、 "jpeg"、iout); iout.close(); output.close(); bytearrayinputStream in = new bytearrayinputStream(output.tobytearray()); setinputStream(in); 「成功」を返します。 } private color getRandomColor(ランダム、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);新しい色(r、g、b)を返します。 }}ログインの成功ページSuccess.jsp
<%@ page Language = "Java" Import = "Java.util。*" PageEncoding = "UTF-8"%> <%@ page Import = "com.truts.util.cookieutils"%@ page Import = "org.apache.commons.lang.xwork.stringutils" prefix = "s"%> <%string path = request.getContextPath(); string basepath = request.getscheme() + "://" + request.getServername() + ":" + request.getServerport() + path + "/";%> <!<!<!<!<! <title> success page </title> </head> <body> <%cookie [] cookies = request.getCookies(); if(cookies!= null){for(cookie cookie:cookie){if(cookieutils.user_cookie.equals(cookie.getname())){string value = cookie.getValue(); //文字が空であるかどうかを判断string loginname = spilled [0];文字列パスワード=こぼれ[1]; out.println(loginname + "Welcome to Login"); }}}}}}%> <s:a action = "loginaction!logout.action" namespace = "/"> safe exit </s:a> </body> </html>読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!