`

response生成图片验证码

阅读更多
服务器对客户端浏览器做出的响应被封装成一个HttpResponse对象。要对浏览器进行操作,只需要操作HttpRespones对象,通过HttpServletResponse.getWriter()获得PrintWriter,该对象为outputStream的子类。然后使用该对象输出信息即可。
    本例将使用Servlet输出图片验证码。图片验证码的原理是,服务器生成一个包含随即的字符串图片发给客户端,客户端提交数据时需要填写字符串作为验证信息。由于字符串保存在图片里,因此机器很难识别,从而达到防止有人使用计算机程序恶意发送信息的目的。
   本帖由卡菲牛奶撰写,原文请访问http://fuchangle.iteye.com/blog/1325408
开始正文
Servlet输出图片时,需要调用getOutputStream输出图片,代码如下:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class IdentityServlet extends HttpServlet{
	public static final char[] CHARS={'2','3','4','5','6','7','8','9','A','B','C',
		'D','E','F','G','H','K','M','L','N','L','X','Y','Z','Q'};
	public static Random random=new Random();
	
	public static String getRandomString(){
		StringBuffer buffer=new StringBuffer();
		//随即产生6位数
		for(int i=0;i<6;i++){
			buffer.append(CHARS[random.nextInt(CHARS.length)]);
		}
		System.out.println(buffer.toString());
		return buffer.toString();
	}
	//获取随即的颜色
	public static Color getRandomColor(){
		return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
	}
	//返回某颜色的反色
	public static Color getReverseColor(Color c){
		return new Color(255-c.getRed(), 255-c.getGreen(),255-c.getBlue());
	}
	
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/jpeg");
		
		String randomString=getRandomString();
		request.getSession(true).setAttribute("randomString", randomString);
		int width=100;//图片宽度
		int height=30;//图片高度
		
		Color color=getRandomColor();	//随即颜色。用于背景颜色
		Color reverse=getReverseColor(color);//反色,用于前背景
		//创建一个彩色图片
		BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		//获取绘图对象
		Graphics2D g=bi.createGraphics();
		g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));//设置字体
		g.setColor(color);	//设置颜色
		g.fillRect(0, 0, width, height);//绘制背景
		g.setColor(reverse);//设置颜色
		g.drawString(randomString, 18, 20);
		
		for(int i=0;i<100;i++){
			g.drawRect(random.nextInt(width), random.nextInt(height),1, 1); //随即噪音点
		}
		
		ServletOutputStream out=response.getOutputStream();	//转换JPEG格式
		
		JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); //编码器
		encoder.encode(bi);
		out.flush();	//输出到客户端
	}
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
}


代码中利用一个随机数生成Random与char[]类型的字符字典生成随即字符串,字符字典里将比较容易混淆的0和O,1和I等都去掉,然后生成一个长100宽30的图片利用随即颜色填充背景,利用反色在前面绘制随即字符,并画出100个位置随即 的噪点,增加图片的识别难度

该Servlet需要配置到web.xml中,代码如下:
web.xml
  <servlet>
  		<servlet-name>IdentityServlet</servlet-name>
  		<servlet-class>com.fcl.IdentityServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  		<servlet-name>IdentityServlet</servlet-name>
  		<url-pattern>/servlet/IdentityServlet</url-pattern>
  </servlet-mapping>


然后访问该Servlet就可以预览图片啦。为了演示方面,下面用一个HTML文件引用这个图片验证码,代码如下:
   <script type="text/javascript">
		function reloadImage(){
			document.getElementById('btn').disabled=true;
			document.getElementById('identity').src='servlet/IdentityServlet?ts='+new Date().getTime();
		}
	
	</script>


     <body>
  		<img  src="servlet/IdentityServlet" id="identity" onload="btn.disabled=false;">
  		<input type="button" value="更换图片" onclick="reloadImage()" id="btn">
  </body>

这样就OK啦!
  • 大小: 25.8 KB
2
0
分享到:
评论

相关推荐

    response生成图片验证

    生成图片验证码的过程分为以下几个步骤: 1. **随机字符生成**:验证码通常包含4到6个随机字符,这些字符可以是数字、大小写字母或其他符号。这些字符是通过Java的随机数生成器和字符集来创建的,确保每次请求时都...

    利用jsp生成图片验证码

    在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...

    ASP.NET生成图片验证码

    ### ASP.NET生成图片验证码知识点详解 #### 一、概述 在Web应用开发中,验证码是一种常见的安全措施,用于区分操作者是人还是自动化程序。本文将详细介绍如何在ASP.NET环境中生成图片验证码,包括代码实现与关键...

    asp生成图片验证码类

    Response.Write "&lt;script&gt;alert('验证码输入错误!');history.go(-1)&lt;/script&gt;" Response.End Else Session("GetCode") = Empty ' 清空Session End If %&gt; 调用页main.asp,点击图片更换验证码 ...

    登陆验证+servlet动态生成图片验证码

    动态生成图片验证码的目的是防止自动化程序(如爬虫或恶意脚本)自动填写表单,从而提高网站的安全性。 在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是...

    SpringMVC生成的验证码图片不显示问题及解决方法

    "SpringMVC生成的验证码图片不显示问题及解决方法" 知识点1: SpringMVC验证码图片生成 在SpringMVC中,生成验证码图片需要使用@Controller注解的Controller类,通过@RequestMapping注解的方法来处理验证码图片的...

    jsp生成图片验证码

    总结来说,使用JSP生成图片验证码涉及到以下几个关键点:生成随机字符串、存储验证码、绘制并输出图片以及设置HTTP响应类型。这种方法简单易用,但要注意,对于高级的自动化攻击,可能需要更复杂的验证码解决方案,...

    Java生成图片验证码[文].pdf

    在Java编程中,生成图片验证码是一项常见的安全措施,用于防止自动化程序(如机器人)对网站或应用程序进行恶意操作。验证码通常是一串随机字符,用户需要输入这些字符才能继续操作,例如注册、登录或提交表单。以下...

    JSP生成图片验证码

    在这个特定的案例中,我们讨论的是如何使用JSP生成图片验证码,这是一种常见的安全机制,用于防止自动机器人或恶意用户进行非法操作。 验证码的主要目的是验证用户是否为真实的人,而不是机器。它通常是一串随机...

    使用google.kaptcha来生成图片验证码的实现方法

    使用google.kaptcha来生成图片验证码的实现方法 在本文中,我们将详细介绍如何使用google.kaptcha来生成图片验证码的实现方法。google.kaptcha是一个用于生成图片验证码的Java库,通过使用该库,可以轻松地生成图片...

    JSP页面验证码生成图片

    ### JSP页面验证码生成图片详解 #### 一、概述 在网站登录或注册过程中,为了防止恶意登录或机器人操作,通常会使用验证码机制。本文档详细介绍了一种利用JSP技术生成验证码图片的方法。该方法通过Java后端动态...

    生成图片验证码

    ### 生成图片验证码知识点解析 #### 一、概述 在当今互联网应用中,为了防止恶意登录、表单提交等操作,图片验证码作为一种简单而有效的方法被广泛应用。本文将基于提供的文件信息来详细解析如何实现一个图片...

    java 生成动态gif 验证码

    在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人或者恶意脚本对网站进行非法操作。这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能...

    net自动生成登录验证码(图片)

    ### ASP.NET 自动生成登录验证码(图片) #### 知识点概览 1. **ASP.NET 页面生命周期及事件处理** 2. **验证码生成原理** - 字符串生成 - 图像绘制 3. **图像处理技术** - 使用 `Graphics` 类 - 使用 `Bitmap` ...

    生成验证码图片的jsp代码

    在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...

    java web笔记之servlet生成验证码

    验证码的主要目的是区分人类用户和自动化程序,通过要求用户输入图片上的文字或者完成简单的数学问题,来验证其为真实的人类。这有助于防止垃圾邮件、恶意注册、自动化攻击等网络安全问题。 二、Servlet简介 ...

    Jsp图片验证码

    `JSP`(JavaServer Pages)是Java的一种动态网页技术,可以用来生成图片验证码。下面我们将详细探讨如何在JSP中创建图片验证码以及验证用户输入的验证码是否正确。 ### 1. 图片验证码的生成原理 图片验证码的基本...

    html图片验证码组件

    HTML图片验证码组件是一种用于网络安全的身份验证机制,它通过在网页上显示一幅随机生成的图片,其中包含一组可读的字符,然后要求用户输入所见字符来确认他们不是自动化程序。这种技术广泛应用于防止机器人和自动...

    一个asp.net图片验证码

    ASP.NET 图片验证码是一种用于验证用户身份的安全机制,它通过生成随机的图像和文本组合来防止自动化的机器人或恶意软件进行非法操作。这种验证码的主要目的是防止垃圾邮件、自动注册和恶意登录尝试。在这个特定的...

    JSP中利用Servlet生成验证码图片

    ### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...

Global site tag (gtag.js) - Google Analytics