Pair.java
public class Pair<K, E> {
private K key;
private E value;
public Pair() {
}
public Pair(K key, E value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
ImageOut.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
public class ImageOut {
private static final int WIDTH = 62;
private static final int HEIGHT = 20;
private static Color getRandomColor() {
Random random = new Random();
return new Color(50 + random.nextInt(100), 50 + random.nextInt(100),
50 + random.nextInt(100));
}
private static int getRandomBgInt() {
Random random = new Random();
return 180 + random.nextInt(60);
}
private static Font getRandomFont() {
Random random = new Random();
return new Font("Times New Roman", Font.PLAIN, 10 + random.nextInt(8));
}
public static char getRandomChar() {
Random random = new Random();
if (random.nextInt(6) < 3) {
return (char) (65 + random.nextInt(26));
}
if(random.nextInt(6) < 3){
return (char) (48 + random.nextInt(10));
}
return (char) (97 + random.nextInt(26));
}
public static Pair<String, BufferedImage> getImage() {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(new Color(255, getRandomBgInt(), 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
StringBuilder s = new StringBuilder();
for (int i = 0; i < 4; i++) {
String t = String.valueOf(getRandomChar());
s.append(t);
g.setColor(getRandomColor());
g.setFont(getRandomFont());
g.drawString(t, 3 + 16 * i, 18);
}
g.dispose();
return new Pair<String, BufferedImage>(s.toString(), image);
}
}
validateImage.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.awt.image.BufferedImage,javax.imageio.ImageIO" %>
<%@page import="com.lhz.util.Pair,com.lhz.util.ImageOut" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
Pair<String, BufferedImage> p = ImageOut.getImage();
ImageIO.write(p.getValue(), "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
session.setAttribute("valid", p.getKey());
%>
login.jsp
<script type="text/javascript">
function changeValidateCode(obj) {
var timenow = new Date().getTime();
obj.src = "<%=path%>/validateImage.jsp?d=" + timenow;
}
</script>
<td>
<span style="color: red;">*</span>验证码
</td>
<td>
<input style="ime-mode: disabled" class="inputValidate" type="text" name="yanzhm" />
<img alt="看不清?单击更换!" src="<%=path%>/validateImage.jsp" onclick="changeValidateCode(this)" />
</td>
分享到:
相关推荐
php实用验证码一例 php实用验证码一例 php实用验证码一例
万能通杀验证码一句话识别验证码源码2.0破J版验证码识别
验证码(Verification Code)是网络应用中常见的...总的来说,"自定义验证码密码输入器demo"是一个实用的开发资源,可以帮助开发者快速集成验证码功能,并根据应用场景进行个性化定制,提高应用的安全性和用户体验。
验证码(CAPTCHA)是一种常用的技术手段,用于区分用户是人类还是自动程序(如机器人)。其主要目的是保护网站免受自动化攻击,比如垃圾邮件、票务抢购、账户注册等非法操作。通常,验证码会向用户展示一组扭曲的...
4. **防止重复提交**:为了增加安全性,可以设置验证码一次有效,即用户输入验证码后,无论是否正确,都会立即清除session中的验证码,防止恶意用户多次尝试。 5. **优化用户体验**:验证码的设计应考虑用户体验,...
1. **生成验证码**:在`checkcode.jsp`中,可以生成一个包含随机字符的图像,并将验证码存储在session中。通常会先创建一个图像,设置背景色,然后随机生成字符串作为验证码,将字符串保存在session中,最后绘制到...
当用户提交表单时,会携带输入的验证码一同发送到服务器。服务器端通过获取session中的验证码与用户输入的验证码进行比较,如果一致,则验证成功;否则,提示用户重新输入。 这就是"java生成验证码代码"的基本原理...
使用java代码写出的一次性的验证码,需要自己写一个.txt文件
行为验证码是一种高级的验证码形式,它不仅依赖于图像识别,更关注用户在执行验证任务时的行为模式。本资料主要探讨了四种类型的行为验证码:滑块验证码、点选验证码、行为验证码以及旋转验证码,特别是滑动验证码。...
为了实现验证码的校验,用户提交表单时,前端将输入的验证码一同发送到服务器。 在后端,控制器接收表单数据,首先从Session中取出先前保存的验证码,然后与客户端提交的验证码进行比较。如果两者匹配,验证成功;...
在本压缩包中,可能包含的是一个简单的一次性验证码实现的代码示例,适合初学者学习和理解这一概念。可能的文件结构可能包括以下几个部分: 1. **生成器模块**:这个模块负责生成随机的一次性验证码,通常使用强...
1. **服务器端生成验证码**:服务器上需要有一个生成验证码的逻辑,这通常涉及到随机生成一组中文字符或数字,然后将其存储到服务器会话(session)或者Cookie中,以供后续验证使用。 2. **Ajax请求**:当用户触发...
在安卓应用开发中,"安卓发送验证码倒计时效果和自动获取验证码并填充"是一个常见的功能,主要用于用户注册、登录或修改重要信息时的身份验证。这个功能涉及到多个关键知识点,包括网络请求、短信监听、UI更新以及...
描述了一种安全实用的Flash动态验证码,该验证码由ASP代码生成,在Flash中显示,通过Flash动画遮罩,在任一时刻只显示验证码一部分,变换验证码字体、颜色和增加背景噪音等手段增加验证码被自动识别的难度。
验证码(CAPTCHA)是一种用于验证用户是否为人类的技术,它通常用于防止自动化程序(如机器人或爬虫)进行恶意操作,比如批量注册、发送垃圾邮件等。在这个压缩包中,包含的是一个简单的验证码图片生成器的源代码,...
本源码可能实现了一个类似于市面上广泛使用的验证码系统。 一次性验证码的实现原理主要有两种:基于时间的一次性密码(TOTP)和基于挑战-响应的一次性密码(HOTP)。TOTP是根据当前时间生成的,而HOTP则基于一个...
整个html打开可以看到效果,不包含验证码背景图片,自己找一个命名为code.jpg就有背景了,js验证码比jsp...这个程序既可以直接验证,也可以点击验证码刷新一个新的验证码(当原来的验证码看不清楚的时候),再验证
在网络安全领域,登录验证码是一种广泛使用的安全机制,用于防止恶意自动化程序(如机器人)未经授权地访问或操作用户账户。本文将深入探讨“gif动态登录验证码”这一特定的技术,以及它如何增强网站的安全性。 ...
验证码是一种通过图形图像显示随机字符的方式,用户需要输入图片中显示的文字来验证其身份。本篇将详细介绍如何使用Java实现一个简单的随机验证码生成器。 首先,创建一个名为`RandomImage`的类,该类主要用于生成...
在Java Web开发中,验证码(CAPTCHA)是一种用于防止机器自动操作的安全机制,它要求用户在执行特定操作前输入图片中显示的随机字符或数字。本项目提供的“javaweb简单的一次性验证码”是一个基于Servlet实现的简单...