`
qq_24665727
  • 浏览: 121046 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

登录验证码的制作与判断正误

    博客分类:
  • web
 
阅读更多

需要使用的文件:
reg.html页面文件
验证码制作文件ImageServlet.java
提交响应文件RegServlet
web.xml配置文件

 

这句话<img src="ImageServlet" />,我们在web.xml文件里面配置ImageServlet文件,可以直接通过这个src访问到ImageServlet文件,然后获得回应,显示验证码
reg.html文件---------------------------------------------

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>用户注册</h2>
	<form action="RegServlet" method="POST">
		帐号:<input type="text" id="userName" name="userName" onblur="sendRequest()" />
		<div id="msg"></div>
		<br /> 验证码<input type="text" name="validate" />
		<img src="ImageServlet" /> <br /> <input type="submit" value="提交" />
	</form>
</body>
</html>

 

------------------------------------------------------------------------
验证码制作文件ImageServlet.java
---------------------------------------------------------------

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 ImageServlet extends HttpServlet {

	// 定义可选择的字符
	private static final String CHARS = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ";
	static Random random = new Random();

	// 得到一个随机的字符串
	private String getRandomString() {
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < 6; i++) { // 生成六个字符
			buffer.append(CHARS.charAt(random.nextInt(CHARS.length())));
		}
		return buffer.toString();
	}

	// 随机背景颜色
	public static Color getRandomColor() { // 得到随机颜色
		return new Color(random.nextInt(128) + 127, random.nextInt(128) + 127,
				random.nextInt(128) + 127);
	}

	public static Color getReverseColor(Color c) { // 得到颜色的反色
		return new Color(255 - c.getRed(), 255 - c.getGreen(),
				255 - c.getBlue());
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/jpeg"); // 设置输出类型

		// 得到随机字符串
		String randomString = getRandomString();
		// 将getSession()设置为true,当会话不存在是返回null
		//将验证码存入session对象,方便验证的时候取出
		request.getSession(true).setAttribute("randomString", randomString);
		// 设置图片的宽、高
		int width = 80;
		int height = 30;

		Color bcolor = getRandomColor(); // 设置背景色
		Color fcolor = getReverseColor(bcolor); // 前景色

		// 创建一个彩色图片
		BufferedImage bimage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_BGR);
		// 创建绘图对象,从bimage上得到的绘制对象,会把数据绘制到bimage上
		Graphics2D g = bimage.createGraphics();
		// 字体样式为宋体,加粗,20磅
		g.setFont(new Font("Vijaya", Font.BOLD, 20));
		// 先画出背景色
		g.setColor(bcolor);
		g.fillRect(0, 0, width, height);

		// 再画出前景色
		g.setColor(fcolor);
		for (int i = 0; i < randomString.length(); i++) {
			// 绘制随机字符
			g.drawString(randomString.charAt(i) + "", 10 + i * 12, 22);
		}

		// 画出干扰点
		for (int i = 0, n = random.nextInt(100); i < n; i++) {
			g.fillRect(random.nextInt(width), random.nextInt(height), 1, 1);
		}
//上面部分便是生成验证码图片代码,下面是将图片输出到请求对象浏览器页面

		// 将图像输出到浏览器
		ServletOutputStream outstream = response.getOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outstream);
		encoder.encode(bimage);
		outstream.flush();
		outstream.close();
	}
}

 ----------------------------------------------
接下来是提交验证码后判断对错的文件响应文件RegServlet

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//首先判断验证码
		//获得用户提交的验证码
		String validate = request.getParameter("validate");
		//从session中获得系统生成的验证码
		String randomStr = (String)request.getSession().getAttribute("randomString");
		
		if(validate.equalsIgnoreCase(randomStr)){
			
			//当验证码正确的时候,才来获得其他数据
			System.out.println("验证码正确!!");
		}else{
			System.out.println("验证码错误!!");
			
		}		
	}
}

 
-web.xml配置文件------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>PicValidate</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>servlet.ImageServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/ImageServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>RegServlet</servlet-name>
    <servlet-class>servlet.RegServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RegServlet</servlet-name>
    <url-pattern>/RegServlet</url-pattern>
  </servlet-mapping>
 
</web-app>

  

 

0
3
分享到:
评论

相关推荐

    java 登录验证码制作

    当用户提交登录表单时,服务器端会检查用户输入的验证码是否与session中存储的原始验证码一致,如果匹配则验证成功,否则提示用户重新输入。 以下是一个简单的验证码生成Servlet示例: ```java import java.awt....

    SSM实现登录验证码功能

    - 后台接收到请求后,从Session中取出验证码并比较与用户输入的是否一致,如果匹配则登录成功,否则提示用户重新输入。 4. **整合SSM**: - 在SpringMVC配置中,定义验证码相关的Controller映射。 - 在Spring...

    php制作可配置的登录验证码

    实现php定制登录验证码

    测试中去掉登录验证码

    在软件测试过程中,有时我们需要去掉登录过程中的验证码以简化测试步骤,提高自动化测试的效率。登录验证码的主要目的是防止恶意机器人或自动程序进行非法操作,但它也会给自动化测试带来额外的复杂性,因为每个...

    简单的js验证码制作

    3. **用户输入验证**:当用户输入验证码后,我们需要比较他们的输入是否与生成的验证码匹配。可以添加一个事件监听器,如`onsubmit`,来在表单提交时进行验证: ```javascript document.getElementById('myForm')....

    gif动态登录验证码

    在压缩包中的“gif动态登录验证码工具类”很可能是实现这种验证码功能的源代码,包含了生成随机字符串、制作GIF动画以及验证用户输入的核心逻辑。 总的来说,“gif动态登录验证码”是一种有效的安全措施,通过利用...

    登录界面的验证码代码

    - **比较**:将用户输入的验证码与保存在session中的正确验证码进行比较,如果相同则表示验证成功。 #### 三、验证码的工作原理 验证码的主要目的是确认用户是否为真实的人类操作者,而不是自动化的程序。在登录...

    PHP登录验证码功能

    PHP登录验证码功能PHP写的登录验证码功能

    jsp用户登录验证码

    ### jsp用户登录验证码知识点详解 #### 一、概述 在Web应用开发中,为了防止自动化工具或恶意脚本对登录系统的频繁尝试,通常会在登录界面加入验证码功能。验证码(CAPTCHA)是一种用来区分人与计算机的技术手段。...

    验证码生成 判断

    验证码生成与判断是Web开发中常见的一种安全机制,主要用于防止自动化程序(如机器人)进行非法操作,例如批量注册、恶意登录等。在这个项目中,"验证码生成 判断" 涉及到的主要知识点包括验证码的生成逻辑、图像...

    适用于各种编程中文汉字验证码制作

    【标题】: "适用于各种编程中文汉字验证码制作" 在编程领域,验证码是一种常见的安全机制,用于验证用户身份,防止自动脚本或者恶意机器人进行非法操作。中文汉字验证码因其独特的复杂性和难以被机器识别的特性,...

    登录验证码

    登录验证码 jigsawcanvas滑动验证码

    VB制作验证码信息 加密验证码

    验证码是一种用于验证用户身份的安全机制,它通常由一串随机字符组成,用户需要在输入框中正确输入才能完成特定操作,如登录、提交表单等。在VB(Visual Basic)中制作加密验证码涉及到编程基础、图像处理以及字符串...

    .net平台用户登陆验证码制作

    在工作中经常用到验证码,验证码的主要作用是防止机器人暴力猜测系统用户名、密码,防止论坛被一些发帖程序大量灌水。验证码一般是有数字、大小写字母组成,也有的有汉字,例如:126邮箱的注册,怎么制作验证码呢?

    登录 单点登录 带验证码登录

    在这个"登录 单点登录 带验证码登录"的实例中,我们将会深入探讨以下几个关键知识点: 1. **登录机制**:登录系统通常需要用户输入用户名和密码。在本示例中,登录过程可能是通过用户界面提交表单,后台Java代码...

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

    为了使验证码与每个用户的登录请求关联,我们需要在生成验证码时使用一个唯一的标识(如 `randomstr`)。当用户提交登录表单时,将这个标识与生成的验证码一起发送到服务器。服务器端根据这个标识来查找对应的验证码...

    jsp实现登录验证码

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

    易语言验证码制作与识别源码

    易语言验证码制作与识别是计算机编程领域中的一个关键知识点,主要涉及到图像处理、模式识别以及字符串匹配等技术。易语言,是由中国程序员王垠开发的一种简单易学的编程语言,其设计目标是让编程变得更加简单直观。...

    servlet验证码制作和过滤器

    5. **验证用户输入**:当用户输入验证码后,服务器端会比较用户输入的验证码与之前保存的验证码是否一致,一致则验证通过,否则失败。 过滤器(Filter)在Servlet生命周期中扮演了重要角色,它们可以: 1. **字符...

    验证码自动识别库制作器

    6. 集成与应用:将训练好的模型集成到验证码自动识别库中,与其他系统或服务接口配合,实现实时或批量的验证码识别功能。 7. 抗攻击策略:为了应对不断变化的验证码类型和反机器识别策略,制作器还需要具备一定的抗...

Global site tag (gtag.js) - Google Analytics