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

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

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>

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人影院在线观看视频 | 精品一久久香蕉国产线看观 | 日本剧情片在线播放中文版 | 欧美成人精品第一区二区三区 | 天堂激情网| 久久婷婷丁香五月色综合啪免费 | 好湿好紧好大野战 | 欧美人曾交| 午夜a一级毛片 | 精品麻豆国产 | 青青成人福利国产在线视频 | 糖心视频在线观看 | 久久免费看少妇高潮A片特爽 | 99国产精品免费观看视频 | 26uuu老色哥| 国产一级在线观看视频 | 精品久久久噜噜噜久久久app | 国产精品亚洲片夜色在线 | 亚洲a视频在线 | 色婷婷久久综合中文久久一本 | ts人妖国产一区 | 陈峰姚瑶全集小说无删节 | 日韩欧美中文字幕出 | 波多野结衣在线观看中文字幕 | 亚洲国产精品网站久久 | jzz大全部| 国产hd老头老太婆 | 免费网站直接进入 | 四川女人偷人真实视频 | 成人综合婷婷国产精品久久免费 | 亚洲男1069gay男猛男 | 乌克兰少妇大胆大BBW | 亚洲成a人片777777久久 | 国产日韩欧美在线播放 | 亚洲国产第一区二区三区 | 晚上禁用的十大黄台视频 | 97理伦| 饭冈加奈子乳喷cead144 | 好紧好爽范冰冰系列 | 国产亚洲视频网站 | 欧美一级在线视频 |