Servlet制作验证码

基于servlet的四位数的验证码 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码 阅读详情

Servlet制作验证码

1.什么是验证码(CAPTCHA):

验证码(CAPTCHA):是一种区分用户是计算机还是人的公共全自动程序。它可以防止计算机执行一些操作。
验证码是很多网站通行的方式,本文利用简易的方式实现了这个功能。

2.为什么要使用验证码:

没使用验证码的问题:不断登陆破解密码,创建垃圾账户,刷票,提交垃圾信息。
通过验证码,由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机。

3.使用Servlet制作验证码:

4.具体代码实现:

ImageServlet:主要用到了BufferedImage类

package com.tom.servlet;

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

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

public class ImageServlet extends HttpServlet{
	
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
		BufferedImage bi = new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);//建立一个缓冲区存
                放图片,三个参数分别为 长,宽,颜色类型。
		Graphics g = bi.getGraphics();//获取图片
		Color c = new Color(200,150,255);//创建颜色
		g.setColor(c);//设置背景颜色
		g.fillRect(0, 0, 68, 22);//在(0,0)绘制图形
		
		char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//验证码展现字符数组
		Random rd = new Random();
		StringBuffer sb = new StringBuffer();
		int rdRange = ch.length,index;
		for(int i=0; i<4; i++){
			index = rd.nextInt(rdRange);//通过产生随机数随机选定显示字符
			g.setColor(new Color(rd.nextInt(88),rd.nextInt(188),rd.nextInt(240)));
			g.drawString(ch[index]+"",(i*15)+3 , 18);
			sb.append(ch[index]);
		}
		request.getSession().setAttribute("picCode", sb.toString());//将验证码写入Session
		ImageIO.write(bi, "JPG", response.getOutputStream());//输出
		
	}

} 
JSP页面:

<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript">
		function reloadCode(){
			var time = new Date().getTime();
			document.getElementById("imageCode").src="<%=request.getContextPath()%>/servlet/ImageServlet?d="+time;
		}//实现点击“看不清”的方法——这里需要注意的是,IE浏览器对于同一个请求路径,默认是不去请求新的资源的,他会到缓存中去拿对应的内容,解决的方法就是给请求的路径加一个随机数,让IE适中认为这是一个新的请求。本文中是加个时间。
	</script>
  </head>
  
  <body>
  <form action="<%=request.getContextPath()%>/servlet/LoginServlet" method="get">
   	 验证码:<input id="checkCode" name="checkCode" type="text">
   	 <img alt="验证码" id="imageCode" src="<%=request.getContextPath()%>/servlet/ImageServlet">
   	 	<a href="javascript:reloadCode();">看不清楚</a><br>
   	 <input type="submit" value="提交">	
  </body>
  </form>
</html>
验证码验证LoginServlet:

package com.tom.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 验证码验证
 * @author LGQ
 * @date 2016年11月22日
 */
public class LoginServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String picCode = (String)request.getSession().getAttribute("picCode");
		String checkCode = request.getParameter("checkCode").toUpperCase();
		response.setContentType("text/html;charset=UTF-8");//设置输出格式
		PrintWriter out = response.getWriter();
		if(picCode.equals(checkCode)){
			out.print("验证码输入正确");
		}else{
			out.print("验证码输入错误");
		}
		out.flush();//输出流刷新
		out.close();//输出流资源关闭
	}

}

5.总结:

以上就是简单实现Servlet制作验证码的步骤,如果有错误,请联系我。

也可以使用开源组件来实现:

*Jcaptcha:一个用来生成图形验证码的Java开源组件,使用起来也是非常的简单方便。与
  Spring组合使用,可产生多种形式的验证码。
*Kaptcha:一个非常实用的验证码生成工具,有了它,你可以生成各式各样的验证码,因为
  它是可配置的。
                                                                                                                                            即便一周都是阴天
                                                                                                                                            也坚信明天的阳光




验证码的制作(一):使用servlet来实现验证码 通过这篇的学习会让你对验证码的实现机制有所了解,会让你认识到项目中为什么要用到验证码。 阅读详情

相关推荐

Java制作验证码的完整代码

JAVA代码制作验证码,可用于注册等功能页面 要导入servlet-api.jar包 创建验证码的Util工具类: 先创建图片并生成随机的验证码字母 设置图片的底色,并用setFont函数将验证码画在图片上,如果想让验证码难一点,可以添加for循环的代码给图片增加旋转角度 给验证码增加干扰线,提高安全性 设置边框 创建VerifyPic的servlet,通过Util类获取代码,并存入session中,然后输送去前端页面 前端页面验证码如下: 完整Util工具类代码如下: package com.

Li3422的博客 2767

使用Servlet实现验证码

没有验证码带来的问题 对特定用户不断登录破解密码。 对某个网站创建账户。 对某个网站提交垃圾数据。 对某个网站刷票。 通过验证码由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机。 定义: 验证码(CAPTCHA):是一种区分用户是计算机还是人的公共全自动程序。 作用:防止恶意破解密码、刷票、论坛灌水,防止黑客暴力破解。 使用Servlet实现验...

yewen1234的博客 423

Python+whisper/vosk实现语音识别

Whisper 是一个由 OpenAI 开发的人工智能语音识别模型,它能够将语音转换为文本。Whisper 模型特别之处在于它的设计目标是能够理解和转录多种语言的语音,包括但不限于英语。Whisper 模型在训练时使用了大量不同语言的语音数据,这使得它具有很好的跨语言能力。Vosk 是一个开源的语音识别库,它可以在离线环境下工作,不依赖于任何外部服务。Vosk 基于Kaldi语音识别框架,支持多种语言,包括中文。Vosk提供了多种预训练模型,可以根据需求选择适合的模型进行语音识别。

weixin_44458771的博客 5939

在servlet中生成验证码图片

一、验证码(公共全自动程序) 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进

斌斌(Java) 1830

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

视频倍速 - 在线调倍速的加速器APP工具

一刀工具箱APP提供一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!视频倍速-在线调倍速的加速器-一刀工具箱APP。...

无涯教程 7555

【Java 进阶篇】Java Web开发:实现验证码功能

验证码是“全自动区分计算机和人类的公证测试”(Completely Automated Public Turing test to tell Computers and Humans Apart)的缩写。它是一种用于识别用户是否为真实人类的技术。验证码通常包括一个随机生成的字符串,用户需要在输入框中输入正确的字符串以证明他们不是机器人。验证码的主要目的是防止自动化机器人攻击,例如恶意注册帐户、暴力破解密码或发垃圾邮件。

繁依Fanyi的博客 6384

电源新手别怕!手把手教你搞定Buck电路的环路补偿(附Type II/III补偿器参数计算)

本文为电源设计新手详细解析Buck电路环路补偿技术,重点介绍Type II和Type III补偿器的参数计算与设计方法。通过实例演示和实用技巧,帮助工程师快速掌握环路补偿原理,解决电源振荡、响应慢等问题,提升电路稳定性与性能。

weixin_30607029的博客 617

「Java功能实现」验证码制作篇-使用Servlet实现验证码

一.验证码的作用 1.验证码简介 验证码(captcha):是一种区分用户是计算机还是人的公共全自动程序。 2.验证码的作用 可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一特定注册用户用特定程序暴力破解方式进行不断的登录尝试 二.使用Servlet实现验证码 我的项目环境: jdk:1.8 ide:Eclipse 服务器:tomcat7 首先创建个we...

格物致知 419

Chkdsk误删文件?5步教你从FOUND.000文件夹找回重要数据(附工具推荐)

本文详细介绍了当Chkdsk误删文件后,如何从FOUND.000文件夹中找回重要数据的5个步骤。包括理解Chkdsk与FOUND.000的关系、定位与访问FOUND.000文件夹、手动恢复CHK文件的技巧、使用UnCHK工具自动化恢复以及预防数据丢失的关键措施。适用于Windows用户解决数据丢失问题,特别是NTFS文件系统下的文件恢复。

weixin_30687051的博客 390

用 XCO 库一键找出某个 ABAP 类的全部子类

ABAP XCO库子类枚举技术解析 本文介绍了在ABAP项目中如何利用XCO库高效获取类的继承层次结构。传统方法使用CL_ABAP_CLASSDESCR或手动维护映射表存在效率低、易遗漏的问题。新方法通过XCO库的IF_XCO_AO_CLASS接口,可简洁地获取父类的所有子类(包括间接子类)。 核心API链式调用: 获取类句柄:xco_cp_abap=>class() 导航子类集合:subclasses->all 获取结果:get()返回类引用表或get_names()返回类名列表 典型应用场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

servlet制作验证码

1.打开项目,看一下自己的分支位置,再pull,再写代码 简化代码: 声明方法: private void showMsg(HttpServletResponse resp,String msg){ 传参 resp.setCharacterEncoding("utf-8");//使web界面上显示中文 PrintWriter out = resp.getWriter(); out.println("<htm

weixin_46698994的博客 359

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

阿飞2018 1184

servlet制作验证码和验证码的点击切换

做了一个小例子,web在登陆的时候

maojycom的专栏 1580

蓝牙学习笔记之SMP协议(十四)

目录 写在前面 SM规范简述 安全管理器 加密工具 配对流程 安全属性 IO功能 加密密钥大小 配对算法 低功耗蓝牙安全 密钥和值的定义 分发密钥的生成 密钥分配 安全管理器会话协议 介绍 ​​​​​​​命令格式 写在前面 安全规范协议,主要是描述LE控制器设备配对、认证、加密等过程进行规定,同时也对相关算法进行了说明。 低功耗蓝牙的安全管理经历了几个阶段,L...

在云巅的博客 3662

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java实现验证码制作(servlet)

一、验证码的定义与作用 验证码是一种区分用户是计算机还是人的全自动程序。它有以下几点作用:可以防止恶意破解密码,刷票、论坛灌水、有效防止某个黑客对某一特定注册用户用特定程序暴力破解方式进行不断登录尝试。 二、使用serlvet实现验证码的制作 1.大体思路与步骤 首先制作前台页面,包括一个用于输入验证码的text文本框和一个用于显示图片的标签,与其它不同的是,标签的src...

独孤龙少侠的博客 472

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

使用Servlet制作简单的登陆验证码

最近闲下来搭了个s2sh框架准备做毕业设计,想给登陆界面来个验证码,就上网查了下总结之后已经研究成功我用的是Servlet生成四个随机数然后制作一个图片下面上代码ImageRandCode.java package com.dnion.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; i

小白白 3037

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用Servlet制作网页验证码

验证码简介 对于验证码,相信每个人都不会陌生,当我们在一个网站进行注册登录时,发布帖子时,经 常需要输入验证码进行验证,但其实这对用户体验来说很不友好,我们需要多输入一次和我们貌 似没有太大关系的数据,那为什么大多数网站都有网页验证码呢? 那么没有验证码会带来哪些问题? 1. 对特定用户不断登录破解密码 2. 对某个网站重复创建账户 3. 对某个网站...

qq_38899312的博客 348

java servlet 制作验证码

登录html ,使用img src 链接到 java的servlet 通过script  改变页面参数,刷新       function change(){   document.getElementById('ww').src='CheakBox?='+new Date().getTime();      }               

Prettily的博客 527

Servlet 获取的随机图片验证码制作

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

phone13144830339的博客 246

servlet Graphics.setColor() 验证码制作中可能遇到的小问题

在设计编辑图片验证码servlet过程中,遇到已定义好的Graphics变量g,在调用setColor()方法时,如果遇到“The method setColor(Color) is undefined for the type Graphics”时,很可能就是import中导入的类有错误,只要将import com.sun.prism.Graphics,替换成import java.awt.Gr

lingoMu的博客 1378

java验证码制作

这个是我按照慕课网上的教程一步步走下来的流程,这里做个小记录。 ------------------------------------------------------------------------------------ 1。验证码概述  CAPTCHA--Completely Automated Public Turing Test to Tell Computers and

829

注册--验证码制作

1.input 输入框和验证码图片(src 属性引入图片): <input id="code" name="code" type="text" class="chen_txt yanzm" placeholder="验证码" onblur="checkCode()"> <div> <img id="captchaImg" style="CUR...

chen_xingyao的博客 466

利用ajax+jsp+servlet实现网页验证码的生成

效果如下。 点击9888的验证码,可以重新获取验证码。 实现方法主要是ajax+servlet+jsp ajax部分(这段js需要在页面加载完后执行,不让可能找不到放图片的位置) //向AjaxGet这个servlet发送post消息 function verification(){ http_request2.open("POST","../AjaxGet",true);...

yahahassr的博客 856

javaweb 验证码制作

第一步:写一个验证码的类,名为VCode.java

余之孟德的专栏 516

验证码生成无敌版

1.创建一个servlet package cn.itcast.common; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.annotation.Resource; import javax.imageio

IT程序员的成长记 1979
下一篇: 单例设计模式
唯独熟尔
博客等级 码龄10年 0粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值