`

登录验证码的实现

阅读更多
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 ImageCodeUtil {

	private ByteArrayInputStream image;// 图像
	private String str;// 验证码
	
	public ImageCodeUtil() {
		// TODO Auto-generated constructor stub
		this.init();
	}
	/*
	 * 取得ImageUtil实例
	 */
	public static ImageCodeUtil Instance() {
		return new ImageCodeUtil();
	}

	/*
	 * 取得验证码图片
	 */
	public ByteArrayInputStream getImage() {
		return this.image;
	}

	/*
	 * 取得图片的验证码
	 */
	public String getString() {
		return this.str;
	}
	
	private void init() {
		// 在内存中创建图象
		int width = 60, height = 20;
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 获取图形上下文
		Graphics g = image.getGraphics();
		// 生成随机类
		Random random = new Random();
		// 设定背景色
		g.setColor(getRandColor(200, 250));
		g.fillRect(0, 0, width, height);
		// 设定字体
		g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
		// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
		g.setColor(getRandColor(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);
		}
		// 取随机产生的认证码(4位数字)
		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.str = sRand;

		// 图象生效
		g.dispose();
		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());
		}

		this.image = 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);
	}
}

 生成验证码的类,调用方法:

public String imageCode() throws Exception{
		ImageCodeUtil imgcode = ImageCodeUtil.Instance();
		String navTurn = WebTools.getParameter(getRequest(), "navTurn");
		setAttributeInRequest("navTurn", navTurn);
		this.setInputStream(imgcode.getImage());// 取得带有随机字符串的图片
		ActionContext.getContext().getSession().put("adminLoginCode", imgcode.getString());// 取得随机字符串放入HttpSession
		return SUCCESS;
	}

 

前台调用如下:

<div><label for="">验证码:</label>
<input class="login-yzm" name="imageCode" type="text" />
<img src="${ctx}/back/Admin/imageCode.do"    onClick="this.src='${ctx}/back/Admin/imageCode.do?random='+Math.random()"/>
<span class="codeErrorMes" style="color: red;display: none;"></span></div>

  配置文件struts.xml 中需要添加:

<result name="success" type="stream">
				<param name="contentType">image/jpeg</param>
				<param name="inputName">inputStream</param>
			</result>

 

 

分享到:
评论

相关推荐

    Jsp 登录 验证码 实现

    Jsp 登录 验证码 实现

    layui实现登陆界面验证码.docx

    layui 实现登陆界面验证码 layui 是一个流行的前端框架,它提供了很多实用的功能和组件,其中包括实现登陆界面验证码的功能。...通过使用 layui 的表单组件和 canvas 元素,我们可以轻松地实现验证码的生成和验证。

    SSM实现登录验证码功能

    在这个“SSM实现登录验证码功能”的项目中,我们将探讨如何在SSM框架下添加验证码功能,以增强用户登录的安全性。 首先,验证码功能的基本目的是防止恶意自动化程序(如机器人或爬虫)进行非法操作,如频繁尝试登录...

    SpringBoot登录验证码实现过程详解

    SpringBoot登录验证码实现过程详解 SpringBoot登录验证码实现过程详解是指在SpringBoot框架中实现登录验证码的整个过程。验证码是指在登录过程中,服务器生成的一串随机字符,用户需要输入正确的验证码以便通过验证...

    登陆验证码的c#代码

    该代码可以帮助开发者快速实现验证码功能,以提高网络应用程序的安全性。 知识点: 1. 如何使用 C# 生成登陆验证码代码 2. 验证码的实现机制 3. 如何使用随机数生成器生成验证码字符串 4. 如何使用 Graphics 对象...

    3个java登录验证码的例子全网最全

    最后,`struts2验证码.rar`可能是一个基于Struts2框架的登录验证码实现。Struts2是一个流行的Java Web MVC框架,这个例子可能包含: 1. **Struts2拦截器**:自定义拦截器实现验证码的生成和验证。 2. **Action类**...

    java 登录验证码制作

    本教程将详细讲解如何在Java JSP环境下制作一个简单的登录验证码。 首先,我们需要理解验证码的基本原理。验证码通常由随机生成的一串字符(包括字母、数字)组成,并通过图像展示出来,用户需要在输入框中正确输入...

    登录时随机验证码.rar

    本示例中的“登录时随机验证码.rar”文件包含了一个简单的登录验证码实现,主要涉及到以下几个核心知识点: 1. **验证码生成**: 验证码通常由一组随机字符(包括字母、数字、特殊符号)组成,目的是让人类用户能...

    javaWeb使用验证码实现简单登录

    JavaWeb使用验证码实现简单登录 在JavaWeb开发中,验证码是一种常用的安全机制,用于防止机器人和恶意攻击。下面将详细介绍如何使用验证码实现简单登录功能。 验证码的原理 验证码的原理是基于HTTP协议的请求响应...

    java登录验证码实现代码

    Java 登录验证码实现代码详解 本文将详细介绍 Java 实现登录验证码的实现代码,包括验证码图片的生成、字符序列的随机生成、图片的绘制和输出等部分。 验证码图片生成 验证码图片的生成是通过 Java 中的 ...

    Android验证码的实现

    本篇文章将深入探讨如何在Android平台上实现验证码功能,包括自定义控件的创建和验证码的生成与验证。 首先,验证码的主要目的是防止恶意机器人或自动化脚本进行非法操作,如批量注册、刷票等。在Android应用中,...

    详细介绍Java阿里云的短信验证码实现

    Java阿里云短信验证码实现 Java阿里云短信验证码实现是指通过阿里云短信服务平台发送短信验证码的实现,以下是该实现的详细介绍。 登录阿里云开放平台 在实现Java阿里云短信验证码之前,需要首先登录阿里云开放...

    vue+springboot+redis+kaptcha实现登录验证码

    在验证码实现中,Spring Boot后端可以生成随机的验证码图像,并将其存储到响应体中返回给前端,或者存储到Redis中以保持状态。 Redis是一个高性能的键值数据库,常用于存储临时数据,如会话或验证码。将验证码存储...

    java web登录验证码

    java web登录验证码实现,分享,共勉学习。

    asp.net mvc验证码实现

    在这个场景中,我们关注的是在ASP.NET MVC中实现验证码的功能。验证码的主要目的是防止自动机器人或恶意用户进行非法操作,例如垃圾邮件提交、恶意注册等。下面将详细讨论如何在ASP.NET MVC中实现验证码。 首先,...

    spring-gateway实现登录验证码校验的代码,百分百可用

    以上就是使用 Spring Gateway 结合 Kaptcha 实现登录验证码校验的完整流程。这个方案不仅提高了系统的安全性,还保证了用户体验,因为所有验证都在网关层完成,无需向各个微服务传递额外的验证负担。通过这种方式,...

    动态滑动后端验证码实现

    动态滑动后端验证码是一种常见的安全验证机制,用于防止自动化的机器人或恶意脚本进行非法操作,如批量注册、恶意登录等。这种验证码系统通过在用户界面生成一幅含有部分遮挡图像的图片,用户需要通过拖动滑块来拼合...

    beego框架图形验证码实现

    【beego框架图形验证码实现】是使用Go语言开发的一个高效且功能丰富的图形验证码库,它为Web应用提供了安全的验证码生成服务。这个库的核心目的是为了防止自动化程序(如机器人)进行非法操作,如批量注册、恶意登录...

    jsp实现登录验证码

    jsp登录验证码,很好的登录验证码初学易懂

    中文及字母数字验证码实现

    在“中文及字母数字验证码实现”中,系统会从预设的汉字库和字母数字集合中随机抽取一定数量的字符。为了增加破解难度,这些字符可以包含大小写字母、数字以及中文字符。 2. **乱序排列**:抽取的字符会被随机排列...

Global site tag (gtag.js) - Google Analytics