在HTML中放一个文本框,一个img,如下:
验证码:<input id="checkCode" class="input_check" type="text" value="" maxlength="4"/>
<img id="checkCodeImg" src="login/ImageCode.jsp" border="0" align="absmiddle" />
然后在webRoot/login目录下新建ImageCode.jsp文件,如下:
<%@ page contentType="image/jpeg"
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}%>
<%
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//在内存中创建图象
int width = 65, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
//设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
//取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
//nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
//将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
//将认证码存入SESSION
session.setAttribute("check_code", sRand);
//图象生效
g.dispose();
//输出图象到页面
try {
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
e.printStackTrace();
}
%>
现在已经将验证码信息放在session中的check_code属性中了,在后台的类中可以通过下面的方式获得验证码信息:
request.getSession().getAttribute("check_code")
分享到:
相关推荐
获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是...
6. **随机数生成**:`Random`类用于生成随机数,这在创建验证码时非常关键,因为我们需要随机生成验证码的字符和干扰线。 7. **字体和颜色**:`Font`类定义了字体的样式,这里使用了`"Courier New"`字体,大小为24...
为了提高用户体验,验证码图片应提供刷新功能,用户可以轻松获取新的验证码。这通常通过点击一个链接或按钮来触发,服务器再次生成新的验证码并更新图片。 总的来说,.NET生成验证码的功能涉及到图像处理、随机数...
"SpringMVC生成的验证码图片不显示问题及解决方法" 知识点1: SpringMVC验证码图片生成 在SpringMVC中,生成验证码图片需要使用@Controller注解的Controller类,通过@RequestMapping注解的方法来处理验证码图片的...
Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~
### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...
在Android开发中,生成验证码图片是一项常见的功能,主要用于提高用户安全性,防止机器人或者恶意软件自动登录或注册。验证码图片通常包含一串随机数字或字母,用户需要手动输入以验证他们是真实的人。以下是对这个...
本项目提供了生成验证码的功能,并且在Java后台处理了验证码的验证过程,确保用户输入的验证码与系统生成的一致。下面将详细解释相关知识点。 1. **验证码生成**: - **随机数生成**:验证码通常由一系列随机数字...
页面JS生成验证码是一种常见的网页安全措施,用于防止恶意自动化脚本或机器人进行非法操作,如批量注册、恶意登录等。这种技术通常结合图像处理和JavaScript动态生成,使得每个用户看到的验证码都是独一无二的,需要...
在C#中,这些功能可以封装成一个类,如`CaptchaGenerator`,包含`GenerateCaptcha`方法生成验证码图像和字符串,以及`ValidateCaptcha`方法进行验证。为了提高安全性,生成的验证码通常设置为一次性有效,即一旦被...
1. **自动生成验证码**:通常,验证码包含随机生成的一串字符,这些字符可能是数字、字母或其他可识别的图形元素。`CaptchaImageView` 提供了内置的算法来生成这样的随机字符串,并将其转化为图像。 2. **图像扭曲...
本笔记将详细探讨如何使用Servlet来生成验证码。 一、验证码的原理与作用 验证码的主要目的是区分人类用户和自动化程序,通过要求用户输入图片上的文字或者完成简单的数学问题,来验证其为真实的人类。这有助于防止...
### JSP生成验证码图片:深度解析与实现细节 在当今的网络应用中,验证码作为一种防止自动化工具滥用的有效手段,被广泛应用于用户登录、表单提交等场景中。本文将深入探讨如何利用Java Server Pages(JSP)技术...
2. **生成验证码的步骤** - **生成随机字符串**:首先,我们需要生成一个包含大小写字母的随机字符串。在C#中,可以使用`Random`类和`char`类型的方法来实现。例如,可以定义一个包含所有ASCII字母的字符数组,并...
- **Servlet**:在Servlet中调用工具类的方法,生成验证码并将其保存到服务器的一个临时目录,同时将验证码内容保存在Session中,以供后续验证使用。 - **响应客户端**:Servlet返回生成的GIF图像到客户端,通常...
* 使用随机字符串来生成验证码 * 使用 session 来保存验证码 * 不要将验证码明文传输到前端 SpringBoot 实现前端验证码图片生成和校验是一种常见的安全机制,能够防止机器人攻击和恶意访问。但是,我们需要注意...
2. **Ajax请求**:当用户触发验证码获取事件(例如点击一个按钮)时,前端通过JavaScript发送一个Ajax请求到服务器,请求验证码。 3. **响应处理**:服务器接收到请求后,生成验证码并将其返回到客户端,通常以JSON...
当用户点击刷新验证码按钮时,前端发送Ajax请求至服务器重新获取验证码图片,同时更新input的值。为了实现验证码的校验,用户提交表单时,前端将输入的验证码一同发送到服务器。 在后端,控制器接收表单数据,首先...
本教程主要讲解如何利用Servlet来实现动态生成验证码的功能,这对于防止机器人或恶意自动化程序在网站上进行非法操作至关重要。验证码通常由一串随机字符组成,用户需要正确输入才能完成特定操作,如注册、登录或...
例如,可能有一个`generate()`方法用于生成验证码,一个`getImageBytes()`方法用于获取验证码图像的字节数组,以及一个`validate(String input)`方法用于验证用户输入。 在提供的压缩包文件中,"cn"可能代表了包名...