struts2与cookie 实现自动登录和验证码验证实现代码

主要介绍struts2与cookie结合实现自动登录

struts2与cookie结合时要注意采用.action 动作的方式实现cookie的读取

struts2的jar包

 链接数据库文件 db.properties

dbDriver = oracle.jdbc.driver.OracleDriver

url = jdbc:oracle:thin:@localhost:1521:orcl

userName=test

password=password

dao层类代码,通过登录名获取用户信息

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类

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层代码,验证用户名和密码是否正确,密码我本地用了加密算法,需要解密,友友们可以去掉

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验证码的验证

<?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

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 ,网上很多验证码的例子,可以选择自己的方式来写验证码

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

<%@ 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>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是 struts2与cookie 实现自动登录和验证码验证实现代码 的全部内容, 来源链接: utcz.com/p/210384.html

回到顶部