首先是img.jsp页面
<%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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=60, 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(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);
}
String sRand="";
for (int i=0;i<4;i++){
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("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
//这个必写 不写报错
out = pageContext.pushBody();
%>
然后在login.jsp页面包含这个页面
<td><img id="randImage" src="img.jsp" width="60" height="20"border="1"></td>
并且载入这个js
<script language="javascript">
function loadimage(){
document.getElementById("randImage").src = "img.jsp?"+Math.random();
}
</script>
最后在loginAction验证
//生成的验证码是放在session中的,这样比较安全
String sessionRand = (String)session.getAttribute("rand");
//这个登录用户输入的,放在form中
String rand = loginform.getRand();
比较他俩是否一样
分享到:
相关推荐
生成随机验证码通常包括以下步骤: 1. **生成随机数字**:使用Java的`Random`类或者`ThreadLocalRandom`类生成4位或6位的随机数字。例如: ```java int randomNum = ThreadLocalRandom.current().nextInt(10000, ...
总结,使用JSP生成随机验证码涉及到JSP基本语法、内置对象、字符串操作、随机数生成、图像处理以及服务器端验证等多个知识点。这个过程不仅有助于提高网站安全性,也是理解JSP和Web开发实践的重要一课。
本项目“jsp随机验证码生成测试”提供了一个基于Java Server Pages (JSP) 实现的验证码生成实例,旨在帮助开发者理解和实践如何在Web应用程序中集成验证码功能。 验证码的主要目的是验证用户是人而不是计算机程序。...
JSP 生成随机验证码图片(经典老代码)
这个页面会通过Java代码生成随机的验证码字符串,并将其存储在服务器的会话(session)中,以便后续验证使用。同时,它还会生成对应的图像,将随机字符以彩色形式绘制到图像上,然后返回给客户端浏览器显示。 在...
用JSP动态生成随机验证码,已经调试通过的demo,很好用的例子,绝对好用!
在项目中,"页面登陆随机验证码"可能包含了JSP页面的HTML和JavaScript代码,用于显示和处理用户输入的验证码,以及后台的Java类,负责生成和验证验证码。学习这个项目,你可以了解如何在实际开发中结合前端和后端...
生成随机验证码 String captchaCode = generateRandomCode(); // 2. 创建并绘制图片 BufferedImage image = createAndDrawCaptcha(captchaCode); // 3. 存储到Session session.setAttribute("captcha", ...
在JSP(Java Server Pages)页面中生成随机验证码是一项常见的需求,主要应用于用户登录、注册等场景,以防止恶意的自动脚本或机器人操作。验证码的主要目的是增加安全性,通过要求用户输入图片上显示的一串随机字符...
在这个JSP随机验证码实例中,我们将深入探讨其工作原理、实现方法以及源码解析。 验证码的核心是生成一组随机的、难以被程序识别的字符或数字组合。在JSP(JavaServer Pages)环境中,我们可以利用Java的强大功能来...
**JSP随机验证码技术详解** ...总结,JSP生成随机验证码图片是一项实用的技术,它能够有效地防止恶意的自动脚本对网站造成的影响。通过理解其工作原理并结合实际应用,我们可以构建出更加安全、高效的验证码系统。
1. **生成随机中文字符**:Java中可以使用`java.util.Random`类结合Unicode编码来生成随机的中文字符。中文字符通常在Unicode的`\u4e00`到`\u9fff`范围内,所以你需要创建一个包含这个范围的字符数组,并从中随机...
- **字符集**:`char[] code` 定义了一个字符数组,包含了大写字母、小写字母以及数字,用于生成随机验证码。 ##### 2. 随机验证码字符生成 - 通过循环和随机函数生成4位验证码: ```java for (int i = 0; i ; i...
在本例中,`Random.jsp`是一个JSP文件,它负责生成随机验证码。 2. **验证码**: 验证码是一种防止自动化程序(如机器人)滥用服务的安全机制。它通常由一串随机字符组成,用户需要正确输入才能完成某个操作,如提交...
在JSP中,我们可以使用Java的`java.util.Random`类来生成随机数字和字母,然后结合`java.awt`和`javax.imageio`包中的类来创建图像并写入这些随机字符。`vcode_.jsp`文件很可能包含了生成验证码的核心代码,例如: ...
然后,定义一个方法生成随机的4位数字验证码,这可以通过生成一个介于0到9之间(包含0和9)的随机数并重复4次来实现。接着,使用Graphics对象在BufferedImage上绘制这些数字,可以设定不同的字体、颜色和旋转角度以...
在这个项目中,Servlet用于生成随机验证码。Servlet生命周期包括初始化、服务、销毁三个阶段,其中在服务阶段,Servlet会根据HTTP请求生成一个唯一的、不可预测的字符串,然后将其存储在Session中。同时,Servlet会...
在这个"JSP生成数字验证码程序例子"中,我们将探讨如何利用JSP来生成一种常见的安全机制——数字验证码。 验证码的主要目的是防止自动化程序(如机器人或爬虫)进行非法操作,比如注册、登录或提交表单。它们通常...
Jsp生成随机验证码 1.使用方式:在Jsp页面使用标签即可,例如:<img src="../image.jsp" title="验证码" alt="验证码" id="vCode" /> 2.本代码生成的验证码是一张 由26个英文字母和0-9随机组成的一个组合
在Struts中,我们可以创建一个Action类来处理用户请求,并在这个Action中生成随机验证码。这个验证码通常是一个包含字母和数字的字符串,由Java的`Random`类生成。然后,将这个验证码存储在session中,以便在后续的...