生成验证码的代码
package com.liuzm.mypss.utils; 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; public class VerifyCode { private ByteArrayInputStream image;// 图像 private String str;// 验证码 private static final int WIDTH = 60; private static final int HEIGHT = 25; public static void main(String[] arg) { VerifyCode vcu = VerifyCode.Instance(); System.err.println(vcu.getVerificationCodeValue()); } /** * 功能:获取一个验证码类的实例 * * @return */ public static VerifyCode Instance() { return new VerifyCode(); } private VerifyCode() { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); int randomNum = new Random().nextInt(3); if (randomNum == 0) { initNumVerificationCode(image); } else{ initLetterAndNumVerificationCode(image); } } /** * 功能:设置第一种验证码的属性 */ public void initNumVerificationCode(BufferedImage image) { Random random = new Random(); // 生成随机类 Graphics g = initImage(image, random); String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } this.setStr(sRand);/* 赋值验证码 */ // 图象生效 g.dispose(); this.setImage(drawImage(image)); } /** * 功能:设置第二种验证码属性 */ public void initLetterAndNumVerificationCode(BufferedImage image) { Random random = new Random(); // 生成随机类 Graphics g = initImage(image, random); String[] letter = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; String sRand = ""; for (int i = 0; i < 4; i++) { String tempRand = ""; if (random.nextBoolean()) { tempRand = String.valueOf(random.nextInt(10)); } else { tempRand = letter[random.nextInt(25)]; if (random.nextBoolean()) {// 随机将该字母变成小写 tempRand = tempRand.toLowerCase(); } } sRand += tempRand; g.setColor(new Color(20 + random.nextInt(10), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(tempRand, 13 * i + 6, 16); } this.setStr(sRand);/* 赋值验证码 */ g.dispose(); // 图象生效 this.setImage(drawImage(image)); } /** * 功能:设置第三种验证码属性 即:肆+?=24 */ // public void initChinesePlusNumVerificationCode(BufferedImage image) { // String[] cn = { "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" }; // Random random = new Random(); // 生成随机类 // Graphics g = initImage(image, random); // int x = random.nextInt(10) + 1; // int y = random.nextInt(30); // this.setStr(String.valueOf(y)); // g.setFont(new Font("楷体", Font.PLAIN, 14));// 设定字体 // g.setColor(new Color(20 + random.nextInt(10), 20 + random.nextInt(110), // 20 + random.nextInt(110))); // g.drawString(cn[x - 1], 1 * 1 + 6, 16); // g.drawString("+", 22, 16); // g.drawString("?", 35, 16); // g.drawString("=", 48, 16); // g.drawString(String.valueOf(x + y), 61, 16); // g.dispose(); // 图象生效 // this.setImage(drawImage(image)); // // } public Graphics initImage(BufferedImage image, Random random) { Graphics g = image.getGraphics(); // 获取图形上下文 g.setColor(getRandColor(200, 250));// 设定背景色 g.fillRect(0, 0, WIDTH, HEIGHT); g.setFont(new Font("Times New Roman", Font.PLAIN, 14));// 设定字体 g.setColor(getRandColor(160, 200)); // 随机产生165条干扰线,使图象中的认证码不易被其它程序探测到 for (int i = 0; i < 165; 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); } return g; } public ByteArrayInputStream drawImage(BufferedImage image) { ByteArrayInputStream input = null; ByteArrayOutputStream output = new ByteArrayOutputStream(); try { ImageOutputStream imageOut = ImageIO .createImageOutputStream(output); ImageIO.write(image, "JPEG", imageOut); imageOut.close(); input = new ByteArrayInputStream(output.toByteArray()); } catch (Exception e) { System.out.println("验证码图片产生出现错误:" + e.toString()); } return input; } /* * 功能:给定范围获得随机颜色 */ private Color getRandColor(int fc, int bc) { Random random = new Random(); 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); } /** * 功能:获取验证码的字符串值 * * @return */ public String getVerificationCodeValue() { return this.getStr(); } /** * 功能:取得验证码图片 * * @return */ public ByteArrayInputStream getImage() { return this.image; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public void setImage(ByteArrayInputStream image) { this.image = image; } }
后台ImageAction
package com.liuzm.mypss.web; import java.io.InputStream; import com.liuzm.mypss.utils.VerifyCode; import com.opensymphony.xwork2.ActionContext; public class ImageAction extends BaseAction { private InputStream inputStream; public String execute() throws Exception { VerifyCode verifyCode = VerifyCode.Instance(); this.inputStream = verifyCode.getImage(); ActionContext.getContext().getSession() .put("codeValue", verifyCode.getVerificationCodeValue()); // HttpServletResponse response = ServletActionContext.getResponse(); // PrintWriter out = response.getWriter(); // out.printf("imageCodeValue",verifyCode.getVerificationCodeValue()); return SUCCESS; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } }
前台配置文件
<action name="image" class="imageAction"> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> </result> </action>
登录验证
if (StringUtils.isBlank(codeValue)) { addFieldError("codeValue", "验证码不能为空!"); } else { String imageCodeValue = (String) ServletActionContext.getRequest() .getSession().getAttribute("codeValue"); if (!codeValue.equals(imageCodeValue)) { addFieldError("codeValue", "验证码输入不正确!"); } }
相关推荐
综上所述,“基于SSH的购物系统”充分利用SSH框架的特性,构建了一个高效、稳定的电商解决方案,实现了全面的购物功能。同时,通过与其他技术的融合,保证了系统的安全性、易用性和可扩展性。在实际开发中,开发者...
在此项目中,"基于SSH三大框架网上商城"利用了这三个框架的优势来实现一个功能完备的电子商务平台。 1. **Struts2**:Struts2 是一个MVC(Model-View-Controller)框架,负责处理用户的请求并转发到相应的业务逻辑...
SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架,用于构建高效、模块化且易于维护的Web应用程序。在本项目中,我们将探讨如何利用SSH框架实现登录和注册功能。 1. **Spring**:Spring作为核心框架...
【SSH整合AJAX验证用户名存在和验证码的完整实例】是一个关于使用SSH(Struts、Spring、Hibernate)三大框架与AJAX技术相结合,实现用户注册时的异步验证功能的示例项目。在这个实例中,主要涉及到以下几个核心知识...
当用户提交表单时,我们在后台验证用户输入的答案是否与session中保存的正确答案一致。 6. **安全注意事项** - 验证码的有效期:为防止session固定攻击,应设置验证码过期时间,例如10分钟未使用则失效。 - 安全...
"传智博客SSH商城"是一个基于Struts2框架的电子商务项目,旨在提供一个全面的网上购物体验。这个项目涵盖了前端和后端多个关键功能,包括用户注册、验证以及数据存储等核心环节。以下是对这些知识点的详细解释: 1....
SSH注册登录系统是一个基于Java开发的Web应用程序,它利用了三个主流的开源框架:Struts、Hibernate和Spring,这也就是SSH框架的由来。SSH框架是企业级Java应用开发的常用组合,它提供了模型-视图-控制器(MVC)架构...
在后台,Struts2 Action会验证用户输入的验证码是否正确。 总的来说,这个SSH+EXTJS的demo展示了如何将现代Web开发的前后端技术有效地整合,提供了完整的用户体验和高效的服务器处理。通过学习和理解这个示例,...
在这个项目中,SSH+DWR被用来实现用户登录注册功能,并且重点在于无刷新验证,这是一种提升用户体验的重要技术。 **SSH框架详解:** 1. **Struts2**:是MVC(Model-View-Controller)设计模式的一个开源实现,负责...
本系统采用了MYECLIPSE8.5作为开发工具,后台数据库采用了MYSQL数据库设计,利用JAVA的框架技术S2SH和后台数据处理。利用TOMCAT6.0以上的版本作为服务器,实现了聊天室的聊天功能和显示在线聊天用户信息的功能。 在...
本文将详细介绍如何搭建SSH环境,并实现邮件发送、验证码登录、上传下载、DWR集成以及报表导出等功能。 首先,SSH框架的核心组成部分如下: 1. **Struts2**:这是一个MVC(模型-视图-控制器)框架,负责处理HTTP...
《我的智囊团SSH架构PDF》是一份详细指导如何构建基于SSH框架的Web应用程序的教程。SSH,全称为Struts2、Spring和Hibernate,是Java领域广泛应用的三大开源框架组合,用于实现MVC(Model-View-Controller)设计模式...
2. 保存验证码:将生成的验证码存储在服务器端,如Session中,以便后续验证。 3. 显示验证码:通过图像或者音频形式呈现给用户。 4. 验证用户输入:当用户提交表单时,比对用户输入的验证码与服务器端保存的验证码...
在描述中提到的“内附验证,可长期使用”,可能是指Navicat for MySQL带有激活码或注册信息,使得用户能够合法、长期地使用该软件。然而,需要注意的是,使用非官方途径获取的激活码可能涉及版权问题,建议通过正规...
在Struts2的配置文件中,定义Action的映射路径及其结果页面,以实现用户界面与后台逻辑的交互。 Spring作为服务层的管理器,可以创建Bean定义,配置Service接口及其实现类。Service层负责业务逻辑,可以调用DAO...
Java SSH网上银行系统是一款使用Java编程语言,基于Struts、Spring和Hibernate(SSH)三大开源框架构建的在线金融服务平台。SSH框架是Java企业级开发中常用的一种组合,它结合了Struts的MVC设计模式、Spring的依赖...
SSH框架的购物系统是基于Java技术栈开发的一款电子商务应用程序,主要采用了Spring、Struts和Hibernate三个开源框架。这个系统的设计和实现旨在为用户提供一个安全、高效且用户友好的在线购物平台。 Spring框架作为...
SSH2框架模板是一种基于Java Web开发的常用框架组合,它由Spring、Struts2和Hibernate三个组件构成。这个模板主要用于简化开发过程,提供一个可快速启动的项目结构,以实现如用户登录、注册等基本功能。 1. **...
在这个名为“demo.rar”的压缩包文件中,我们找到了一个基于Java技术实现的SSH(Spring、Struts2、Hibernate)框架的示例应用,该应用专注于用户登录注册以及文件管理功能。这个DEMO是一个办公自动化系统的简化版本...
1. 用户模块:用户注册、登录功能,其中包含了验证码验证,确保用户信息的安全。用户注册后,系统会发送一封带有激活链接的邮件,用户需通过点击链接来激活账户,这涉及到邮箱服务的集成。 2. 一级分类模块:管理...