`
Algernoon
  • 浏览: 23650 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

基于ssh的验证码的后台实现验证

    博客分类:
  • java
 
阅读更多

生成验证码的代码

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框架的特性,构建了一个高效、稳定的电商解决方案,实现了全面的购物功能。同时,通过与其他技术的融合,保证了系统的安全性、易用性和可扩展性。在实际开发中,开发者...

    基于SSH三大框架网上商城

    在此项目中,"基于SSH三大框架网上商城"利用了这三个框架的优势来实现一个功能完备的电子商务平台。 1. **Struts2**:Struts2 是一个MVC(Model-View-Controller)框架,负责处理用户的请求并转发到相应的业务逻辑...

    以ssh为后台框架实现的登录与注册

    SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架,用于构建高效、模块化且易于维护的Web应用程序。在本项目中,我们将探讨如何利用SSH框架实现登录和注册功能。 1. **Spring**:Spring作为核心框架...

    SSH整合AJAX验证用户名存在和验证码的完整实例 提供原代码_好资源0分送

    【SSH整合AJAX验证用户名存在和验证码的完整实例】是一个关于使用SSH(Struts、Spring、Hibernate)三大框架与AJAX技术相结合,实现用户注册时的异步验证功能的示例项目。在这个实例中,主要涉及到以下几个核心知识...

    java web加法验证码实例

    当用户提交表单时,我们在后台验证用户输入的答案是否与session中保存的正确答案一致。 6. **安全注意事项** - 验证码的有效期:为防止session固定攻击,应设置验证码过期时间,例如10分钟未使用则失效。 - 安全...

    传智博客ssh商城

    "传智博客SSH商城"是一个基于Struts2框架的电子商务项目,旨在提供一个全面的网上购物体验。这个项目涵盖了前端和后端多个关键功能,包括用户注册、验证以及数据存储等核心环节。以下是对这些知识点的详细解释: 1....

    SSH注册登录系统

    SSH注册登录系统是一个基于Java开发的Web应用程序,它利用了三个主流的开源框架:Struts、Hibernate和Spring,这也就是SSH框架的由来。SSH框架是企业级Java应用开发的常用组合,它提供了模型-视图-控制器(MVC)架构...

    ssh+extjs全注解的上传、分页、验证码的demo

    在后台,Struts2 Action会验证用户输入的验证码是否正确。 总的来说,这个SSH+EXTJS的demo展示了如何将现代Web开发的前后端技术有效地整合,提供了完整的用户体验和高效的服务器处理。通过学习和理解这个示例,...

    SSH+DWR 用户登录注册(无刷新验证)

    在这个项目中,SSH+DWR被用来实现用户登录注册功能,并且重点在于无刷新验证,这是一种提升用户体验的重要技术。 **SSH框架详解:** 1. **Struts2**:是MVC(Model-View-Controller)设计模式的一个开源实现,负责...

    java-ssh-jsp-mysql网络聊天室实现源码(项目源码-说明文档)

    本系统采用了MYECLIPSE8.5作为开发工具,后台数据库采用了MYSQL数据库设计,利用JAVA的框架技术S2SH和后台数据处理。利用TOMCAT6.0以上的版本作为服务器,实现了聊天室的聊天功能和显示在线聊天用户信息的功能。 在...

    ssh环境搭建

    本文将详细介绍如何搭建SSH环境,并实现邮件发送、验证码登录、上传下载、DWR集成以及报表导出等功能。 首先,SSH框架的核心组成部分如下: 1. **Struts2**:这是一个MVC(模型-视图-控制器)框架,负责处理HTTP...

    我的智囊团ssh架构pdf

    《我的智囊团SSH架构PDF》是一份详细指导如何构建基于SSH框架的Web应用程序的教程。SSH,全称为Struts2、Spring和Hibernate,是Java领域广泛应用的三大开源框架组合,用于实现MVC(Model-View-Controller)设计模式...

    验证码代码与md5加密和分页代码

    2. 保存验证码:将生成的验证码存储在服务器端,如Session中,以便后续验证。 3. 显示验证码:通过图像或者音频形式呈现给用户。 4. 验证用户输入:当用户提交表单时,比对用户输入的验证码与服务器端保存的验证码...

    navicat for mysql 带验证码

    在描述中提到的“内附验证,可长期使用”,可能是指Navicat for MySQL带有激活码或注册信息,使得用户能够合法、长期地使用该软件。然而,需要注意的是,使用非官方途径获取的激活码可能涉及版权问题,建议通过正规...

    SSH框架整合对员工信息管理

    在Struts2的配置文件中,定义Action的映射路径及其结果页面,以实现用户界面与后台逻辑的交互。 Spring作为服务层的管理器,可以创建Bean定义,配置Service接口及其实现类。Service层负责业务逻辑,可以调用DAO...

    java SSH 网上银行系统

    Java SSH网上银行系统是一款使用Java编程语言,基于Struts、Spring和Hibernate(SSH)三大开源框架构建的在线金融服务平台。SSH框架是Java企业级开发中常用的一种组合,它结合了Struts的MVC设计模式、Spring的依赖...

    SSH框架的购物系统

    SSH框架的购物系统是基于Java技术栈开发的一款电子商务应用程序,主要采用了Spring、Struts和Hibernate三个开源框架。这个系统的设计和实现旨在为用户提供一个安全、高效且用户友好的在线购物平台。 Spring框架作为...

    SSH2框架模板

    SSH2框架模板是一种基于Java Web开发的常用框架组合,它由Spring、Struts2和Hibernate三个组件构成。这个模板主要用于简化开发过程,提供一个可快速启动的项目结构,以实现如用户登录、注册等基本功能。 1. **...

    demo.rar_DEMO_java ssh demo_ssh_ssh登录注册_文件管理

    在这个名为“demo.rar”的压缩包文件中,我们找到了一个基于Java技术实现的SSH(Spring、Struts2、Hibernate)框架的示例应用,该应用专注于用户登录注册以及文件管理功能。这个DEMO是一个办公自动化系统的简化版本...

    网上商城——SSH电子商城

    1. 用户模块:用户注册、登录功能,其中包含了验证码验证,确保用户信息的安全。用户注册后,系统会发送一封带有激活链接的邮件,用户需通过点击链接来激活账户,这涉及到邮箱服务的集成。 2. 一级分类模块:管理...

Global site tag (gtag.js) - Google Analytics