一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - struts2與cookie 實現自動登錄和驗證碼驗證實現代碼

struts2與cookie 實現自動登錄和驗證碼驗證實現代碼

2020-06-24 11:59java教程網 JAVA教程

這篇文章主要介紹了struts2與cookie 實現自動登錄和驗證碼驗證實現代碼的相關資料,需要的朋友可以參考下

主要介紹struts2與cookie結合實現自動登錄

struts2與cookie結合時要注意采用.action 動作的方式實現cookie的讀取

struts2的jar包

struts2與cookie 實現自動登錄和驗證碼驗證實現代碼

 鏈接數據庫文件 db.properties

?
1
2
3
4
dbDriver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:orcl
userName=test
password=password

dao層類代碼,通過登錄名獲取用戶信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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;
import com.struts.proj.User;
import com.struts.util.BeanConnection;
 
public class UserDaoImpl implements 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 where f_loginname='"+loginname+"'";
     //System.out.println(selsql);
     PreparedStatement 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();
    }
    return user;
  }
 
  public void save(User user) {
    
  }
  
  public static void main(String[] args) {
    UserDaoImpl daoimpl = new UserDaoImpl();
    daoimpl.login("admin");
  }
 
}

工具類 CookieUtils類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package 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 org.apache.struts2.ServletActionContext;
 
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";
 
  // 增加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);
    return cookie;
  }
 
  // 得到cookie
  public boolean getCookie(HttpServletRequest request, 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();
          // 判斷字符是否為空
          if (StringUtils.isNotBlank(value)) {
            String[] spilt = value.split(",");
            String loginname = spilt[0];
            String password = spilt[1];
            User user = userService.login(loginname, password);
            if (user != null) {
              HttpSession session = request.getSession();
              session
                  .setAttribute(LoginAction.USER_SESSION,
                      user);// 添加用戶到session中
              return true;
            }
          }
        }
      }
    }
    return false;
  }
 
  // 刪除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);
          return cookie;
        }
      }
    }
    return null;
  }
}

service層代碼,驗證用戶名和密碼是否正確,密碼我本地用了加密算法,需要解密,友友們可以去掉

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package 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;
import com.struts.util.DESEDE;
 
public class UserServiceImpl implements UserService {
  UserDao userDao = new 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()).equals(password)) {
      System.out.println("密碼錯誤");
    }
    return user;
  }
 
  public static void main(String[] args) {
    UserServiceImpl useimp = new UserServiceImpl();
    System.out.println(useimp.login("admin", "1234"));
  }
  
}

 struts2的配置文件struts.xml,loginAction和ValidateCodeAction驗證碼的驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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">
<struts>
  <constant name="struts.i18n.reload" value="true" />
  <constant name="struts.devMode" value="true" />
  <package name="loginResult" extends="struts-default" namespace="/">
    <action name="loginAction" class="com.struts.action.LoginAction">
      <result name="success" type="redirect">/success.jsp</result>
      <result name="error">/error.jsp</result>
      <result name="login" type="redirect">/login.jsp</result>
    </action>
    <!-- 驗證碼 -->
    <action name="validate" class="com.struts.action.ValidateCodeAction">
      <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>

 action文件類 LoginAction

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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.ServletActionContext;
 
 
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.struts.proj.User;
import com.struts.service.UserService;
import com.struts.service.impl.UserServiceImpl;
import com.struts.util.CookieUtils;
import com.struts.util.DESEDE;
 
public class LoginAction extends ActionSupport {
  private static final long serialVersionUID = 6650955874307814247L;
  private String f_loginname;
  private String f_password;
 
  private HttpServletResponse response;
  private HttpServletRequest request;
  private Map<String, Object> session;
  private CookieUtils cookieUtils = new CookieUtils();
  private boolean userCookie;
 
  private String validateCode;
 
  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
      return "login";
  }
 
  @Override
  public String execute() throws Exception {
    HttpSession session = ServletActionContext.getRequest().getSession();
    try {
       String code = (String) session.getAttribute("validateCode");
      if (validateCode == null || !validateCode.equals(code)) {
        System.out.println("驗證碼輸入有誤,請正確輸入");
        return "error";
      }
      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);
          return "success";
        }
      }
 
    } catch (Exception e) {
      e.printStackTrace();
    }
    return "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(request);
    if (cookie != null)
      response.addCookie(cookie);
    return "login";
  }
 
  public static void main(String[] args) {
    LoginAction login = new LoginAction();
    try {
      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 response) {
    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 validateCode) {
    this.validateCode = validateCode;
  }
}

驗證碼 ValidataCodeAction ,網上很多驗證碼的例子,可以選擇自己的方式來寫驗證碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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.ByteArrayOutputStream;
import java.util.Random;
 
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
 
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
 
public class ValidateCodeAction extends ActionSupport {
  
  private static final long serialVersionUID = 1L;
  private ByteArrayInputStream inputStream;
  private int width;
  private int height;
  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() throws Exception {
    BufferedImage bimage = new BufferedImage(width, height, 1);
    Graphics g = bimage.getGraphics();
    Random random = new Random();
    g.setColor(getRandomColor(random, 200, 255));
    g.fillRect(0, 0, width, height);
    g.setFont(new Font("Times New Roman", 0, fontSize));
    g.setColor(getRandomColor(random, 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(randomStr);
      g.setColor(new Color(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);
    return "success";
  }
 
  private Color 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);
    return new Color(r, g, b);
  }
 
}

登錄成功頁面success.jsp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%@ 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>
  <head>
    <base href="<%=basePath%>">
    <title>success page</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();
            // 判斷字符是否為空
            if (StringUtils.isNotBlank(value)) {
              String[] spilt = value.split(",");
              String loginname = spilt[0];
              String password = spilt[1];
              out.println(loginname + "歡迎登陸");
            }
          }
        }
      }
    %>
    <s:a action="loginAction!logout.action" namespace="/"> 安全退出</s:a>
  </body>
</html>

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 菠萝视频在线完整版 | 操比图片| 天天爱天天操天天射 | 色噜噜亚洲男人的天堂www | 国产精品女同久久免费观看 | 国产成人在线免费视频 | 亚洲午夜性春猛交xxxx | 热穴高校 | 国产精品久久久久久久久免费 | 俄罗斯13一14处出血视频在线 | 国产精品国产三级国产专区不 | 91chinese 永久免费 | 第一次做m被调教经历 | 国产九九热视频 | 亚洲欧美日韩精品 | 欧美丰满大乳大屁在线观看股 | 国产成人h综合亚洲欧美在线 | 91在线老王精品免费播放 | 动漫美女人物被黄漫小说 | 成人在线播放 | 秋霞在线观看成人高清视频51 | 国产青色 | hh99me福利毛片 | 乌克兰xxxxx| 成人二区 | 亚洲爆操| 成人啪啪漫画全文阅读 | 日本一道本中文字幕 | 欧美性f | 青草热久精品视频在线观看 | 欧美不卡一区二区三区免 | 秒播影视 午夜福利毛片 | 欧美日韩在线一区二区三区 | 亚洲精品午夜视频 | 国产精品中文 | 日韩大片在线 | 国产午夜精品久久久久 | 国产精品视频色拍拍 | 学生小泬无遮挡女HD | 动漫人物差差差动漫人物免费观看 | 999热这里全都是精品 |