`
太阳神喻
  • 浏览: 106812 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSP图片验证码

    博客分类:
  • JSP
阅读更多

产生图片验证码的Servlet:

package web;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ValidationCode extends HttpServlet {

	/**
	 * 验证码的字符集合。
	 */
	private static String codeChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	/**
	 * 产生随机的颜色
	 * @param minColor
	 * @param maxColor
	 * @return
	 */
	private static Color getRandomColor(int minColor,int maxColor)
	{
		Random r = new Random();
		int red = minColor + r.nextInt(maxColor-minColor);
		int green = minColor + r.nextInt(maxColor-minColor);
		int blue = minColor + r.nextInt(maxColor-minColor);		
		return new Color(red,green,blue);
	}
	
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//关闭客户端浏览器的缓冲区。
		response.setHeader("ragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Expirse", "0");
		//设置图形大小。
		int width = 90 , height = 20;
		//建立图形缓冲区。
		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();//获得	Graphics 对象。	
		g.setColor(getRandomColor(180, 250));//设置背景色。
		g.fillRect(0, 0, width, height);//填充背景。
		
		StringBuilder validationCode = new StringBuilder();//用于保存最后的验证码
		String[] fontNames = {"Times New Roman","Book antiqua","Arial"};//用于随机的字体的集合
		
		Random r = new Random();
		//随机生成3-5个验证码
		for(int i = 0; i<3+r.nextInt(3); i++)
		{
			g.setFont(new Font(fontNames[r.nextInt(3)] , Font.ITALIC , height));
			char codeChar = codeChars.charAt(r.nextInt(codeChars.length()));
			validationCode.append(codeChar);			
			g.setColor(getRandomColor(10, 100));
			g.drawString(String.valueOf(codeChar), 16 * i+ r.nextInt(7) ,height - r.nextInt(6));//在图形上输出验证码
		}
		//随机生干扰码
		for(int i = 0; i<30 ; i++)
		{
			g.setColor(getRandomColor(90, 200));
			int x = r.nextInt(width);
			int y = r.nextInt(height);
			g.drawLine(x,y , x+r.nextInt(10), y+r.nextInt(5));
		}
		
		HttpSession session = request.getSession();//得到HttpSession对象
		session.setMaxInactiveInterval(10*60);//设置session对象10分钟失效。
		session.setAttribute("validation_code", validationCode.toString());//将验证码保存在session中
		g.dispose();//关闭Graphics对象
		OutputStream os = response.getOutputStream();//得到输出流
		ImageIO.write(image, "JPEG", os);//以JPEG格式向客户端发送图形验证码
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

 

检测验证码是否正确的方法:

/**
	 * 核对用户输入的验证码是否合法
	 * 
	 * @param request
	 * @param validationCode
	 * @return
	 */
	private boolean checkValidationCode(HttpServletRequest request,String validationCode) {
		// 从HttpSession中获得系统随机生成的验证码
		String validationCodeSession = (String) request.getSession().getAttribute("validation_code");
		// 如果获得的验证码为null,说明难码过期,必须刷新客户端重新获取
		if (validationCodeSession == null) {
			request.setAttribute("info", "验证码过期");
			return false;
		}
		// 输入的验证码不匹配
		if (!validationCode.equalsIgnoreCase(validationCodeSession)) {
			request.setAttribute("info", "验证码不正确!");
			return false;
		}
		return true;
	}

 

JSP页面:使用图形验证码的方法非常简单,只需将“validationCode”(产生验证码的Servlet的url-pattern)作为<img>标签的src属性值即可

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
	<title>注册</title>
	<script type="text/javascript">
		//重新获得验证码
		function refresh() {
			var img = document.getElementById("img_code");
			img.src = "validationCode?" + Math.random();//加随机参数,以保证每次的src属性都不同
		}
	</script>
</head>

	<body>
		<form action="register" method="post">
			<center>
				用 户 名:
				<input type="text" name="userName">
				<br />
				密 码:
				<input type="password" name="pwd">
				<br />
				确认密码:
				<input type="password" name="pwd2">
				<br />
				邮 箱:
				<input type="text" name="email">
				<br />
				验 证 码:
				<input type="text" name="validation_code">
				<img title="单击刷新" alt="验证码" src="validationCode" id="img_code" onclick="refresh()">
				<br />
				<input type="submit" value="注册">
				<input type="reset" value="重置">
			</center>
		</form>
	</body>
</html>

 

 

分享到:
评论

相关推荐

    jsp图片验证码

    jsp图片验证码 希望对大家有用 防止机器注册

    生成验证码 jsp 图片验证码

    总的来说,生成JSP图片验证码涉及了Java图像处理、随机数生成、Session管理等多个知识点。通过合理的实现,可以有效地防止自动化攻击,保护网站的安全。在实践中,我们需要不断优化验证码的设计,以平衡用户体验和...

    Jsp图片验证码

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

    jsp图片验证码源代码 自由模块

    【标题】"jsp图片验证码源代码 自由模块"涉及的知识点主要集中在Java服务器页面(JSP)技术、图片验证码的实现以及模块化的编程思想。验证码通常用于防止自动化程序(如机器人)对网站进行恶意操作,例如批量注册、...

    JSP图片验证码[文].pdf

    总的来说,JSP图片验证码的实现涉及了Java图形处理、随机数生成、字符编码和图像处理等多个方面的知识,是软件开发中常用的一种安全防护手段。通过这种方式,可以有效防止恶意自动化程序对网站的攻击,保护用户的...

    JSP 生成随机验证码图片(经典老代码)

    JSP 生成随机验证码图片(经典老代码)

    jsp验证码图片例子

    **JSP验证码图片详解** 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人或爬虫)进行非法操作的安全机制。在网页开发中,JSP(Java Server Pages)被广泛用于生成动态的、难以通过机器自动识别的验证码图片。...

    jsp图片验证码实例

    总结:本实例通过Java的图形处理能力生成图片验证码,结合JSP技术将验证码返回给客户端,并将其值存储在session中以供验证。这涉及到了Java图形编程、HTTP响应处理、session管理和安全性实践等多个IT领域的知识点。...

    JSP页面验证码生成图片

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

    利用jsp生成图片验证码

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

    Jsp-图片验证码及刷新

    在网页应用中,图片验证码(CAPTCHA)是一种广泛使用的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。它要求用户输入显示在图片中的随机字符,以此来验证用户是人而不是计算机...

    jsp生成图片验证码

    生成JSP图片验证码的步骤如下: 1. **生成随机字符串**:首先,我们需要编写一个函数来生成随机字符串,这个字符串将作为验证码的内容。我们可以从字母和数字的集合中随机选择字符,确保字符串长度适中,比如4到6位...

    JSP验证码+js验证

    在JSP中,我们可以创建一个Servlet来生成随机的图片验证码。这个Servlet的主要任务是生成一个不可预测的字符串,并将其渲染为图像。以下是一个简单的步骤: 1. **生成随机字符串**:通常包含字母和数字,长度可...

    JSP生成图片验证码

    生成JSP图片验证码的过程包括以下几个关键步骤: 1. **生成随机字符串**:首先,我们需要创建一个包含字母和数字的随机字符串。这可以通过Java的`Random`类和`StringBuilder`类来实现,或者使用更安全的`...

    动态jsp图片验证码

    地区性 城区震城地夸大城城城城城震在在城城城老大哥

    jsp随机验证码(图片)

    在Java Web开发中,JSP(JavaServer Pages)可以用来创建动态的、包含随机验证码的图片。以下我们将深入探讨JSP实现随机验证码的技术细节。 ### 1. 验证码的基本原理 验证码的核心在于生成一组难以被机器自动识别...

    JSP实现验证码数字图片

    **JSP实现验证码数字图片详解** 验证码是一种常用的安全机制,用于防止自动机器人或者恶意脚本进行非法操作,如批量注册、频繁提交等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态验证码图片。本文将...

    JSP图形验证码项目

    图形验证码(CAPTCHA)是一种用于区分人类和机器的测试,通常表现为扭曲的字母或数字图片。其目的是防止自动化程序(如机器人或爬虫)滥用服务,例如在这里防止非法登录尝试。在JSP登录页面上,图形验证码会随机生成...

    Jsp常用技巧:图片验证码

    在Java Web开发中,JSP(JavaServer ...综上所述,创建一个JSP图片验证码涉及到Java图形处理、HTTP响应的操纵以及session管理等多个技术点。通过以上步骤,我们可以构建一个基本但有效的验证码系统,增强网站的安全性。

Global site tag (gtag.js) - Google Analytics