`

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生成图片验证码,这是一种常见的安全机制,用于防止自动机器人或恶意用户进行非法操作。 验证码的主要目的是验证用户是否为真实的人,而不是机器。它通常是一串随机...

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

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

    使用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. 图片验证码的生成原理 图片验证码的基本...

    SpringBoot实现前端验证码图片生成和校验

    * 使用 BufferedImage 类来生成图片 * 使用 Graphics 对象来绘制图片 * 使用 Font 对象来设置字体 * 使用 Color 对象来设置字体颜色 * 使用 Random 对象来生成随机字符串 代码示例: ```java public void ...

    html图片验证码组件

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

Global site tag (gtag.js) - Google Analytics