Mainly introduces struts2 combined with cookies to achieve automatic login
When combining struts2 with cookies, you should pay attention to using .action actions to realize cookie reading
struts2's jar package
Link database file db.properties
dbDriver = oracle.jdbc.driver.OracleDriverurl = jdbc:oracle:thin:@localhost:1521:orcluserName=testpassword=password
Dao layer code to obtain user information through login name
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"); }}Tool CookieUtils Class
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"; // Add 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; } // Get 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(); // Determine whether the character is empty 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);// Add user to the session return true; } } } } } return false; } // Delete 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 layer code to verify whether the user name and password are correct. I use the encryption algorithm locally and need to be decrypted. Friends can remove the password
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("The user name does not exist, please check and log in again!"); } if (!DESEDE.decryptIt(user.getF_password()).equals(password)) { System.out.println("Password error"); } return user; } public static void main(String[] args) { UserServiceImpl useimp = new UserServiceImpl(); System.out.println(useimp.login("admin", "1234")); } }Verification of the configuration file struts2.xml, loginAction and ValidateCodeAction verification code of 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"><struts> <constant name="struts.i18n.reload" value="true" /> <constant name="struts.devMode" value="true" /> <package name="loginResult" extends="struts-default" namespace="/"> <action name="loginAction"> <result name="success" type="redirect">/success.jsp</result> <result name="error">/error.jsp</result> <result name="login" 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>
action file class LoginAction
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("The verification code is entered incorrectly, please enter it correctly"); return "error"; } if (f_loginname != null && !"".equals(f_loginname) && !"".equals(f_password) && f_password != null) { User user = userService.login(f_loginname, f_password); // Determine whether to add to the 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"; } // User exits 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; }}ValidaCodeAction, many examples of verification codes on the Internet, you can choose your own way to write the verification code
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), 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); }}Login success page success.jsp
<%@ 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(); // Determine whether the character is empty if (StringUtils.isNotBlank(value)) { String[] spilt = value.split(","); String loginname = spilt[0]; String password = spilt[1]; out.println(loginname + "Welcome to log in"); } } } } } } %> <s:a action="loginAction!logout.action" namespace="/"> Safe Exit</s:a> </body></html>Thank you for reading, I hope it can help you. Thank you for your support for this site!