`
369540808
  • 浏览: 204331 次
文章分类
社区版块
存档分类
最新评论

动态验证码生成实例

 
阅读更多

为了防止某些用户使用软件进行登录和发布信息,一般网站都采用随机的图片类型的验证码进行动态验证。下面实现一个简单的动态验证

1. 图片验证码生成Servlet,RandomCodeServlet.java

package test;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
public class RandomCodeServlet extends HttpServlet{
//验证码图片的宽度。
private int width=60;
//验证码图片的高度。
private int height=20;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{
BufferedImage buffImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D g=buffImg.createGraphics();
//创建一个随机数生成器类。
Random random=new Random();
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
//创建字体,字体的大小应该根据图片的高度来定。
Font font=new Font("Times New Roman",Font.PLAIN,18);
//设置字体。
g.setFont(font);
//画边框。
g.setColor(Color.BLACK);
g.drawRect(0,0,width-1,height-1);
//随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
g.setColor(Color.GRAY);
for (int i=0;i<160;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);
}
//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode=new StringBuffer();
int red=0,green=0,blue=0;
//随机产生4位数字的验证码。
for (int i=0;i<4;i++){
//得到随机产生的验证码数字。
String strRand=String.valueOf(random.nextInt(10));
//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red=random.nextInt(110);
green=random.nextInt(50);
blue=random.nextInt(50);
//用随机产生的颜色将验证码绘制到图像中。
g.setColor(new Color(red,green,blue));
g.drawString(strRand,13*i+6,16);
//将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
//将四位数字的验证码保存到Session中。
HttpSession session=req.getSession();
session.setAttribute("randomCode",randomCode.toString());
//禁止图像缓存。
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
//将图像输出到Servlet输出流中。
ServletOutputStream sos=resp.getOutputStream();
ImageIO.write(buffImg, "jpeg",sos);
sos.close();
}
}

2. 编写登陆页面,login.html

<html>
<head><title>登录页面</title>
<body>
<form method="POST" action="loginchk">
<table>
<tr><td>用户名:</td><td><input type="text" name="username"></td></tr>
<tr><td>密码:</td><td><input type="password" name="password"></td></tr>
<tr><td>验证码:</td><td><input type="text" name="random" maxlength="4"><img src="imgcode"></td></tr>
<tr><td><input type="reset" value="重填"></td><td><input type="submit" value="提交"></td></tr>
</table>
</form>
</body>
</html>

3. 编写登陆处理Servlet,LoginCheckServlet.java

package test;
import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
public class LoginCheckServlet extends HttpServlet{
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{
HttpSession session=req.getSession();
String randomCode=(String)session.getAttribute("randomCode");
if(null==randomCode){
resp.sendRedirect("login.html");
return;
}
String reqRandom=req.getParameter("random");
req.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=GBK");
PrintWriter out=resp.getWriter();
if(randomCode.equals(reqRandom)){
out.println("验证码匹配!");
}else{
out.println("验证码校验失败,请返回重新输入!");
}
out.close();
}
}

4. Servlet配置

<servlet>
<servlet-name>LoginCheckServlet</servlet-name>
<servlet-class>test.LoginCheckServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginCheckServlet</servlet-name>
<url-pattern>/loginchk</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>RandomCodeServlet</servlet-name>
<servlet-class>test.RandomCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomCodeServlet</servlet-name>
<url-pattern>/imgcode</url-pattern>
</servlet-mapping>


分享到:
评论

相关推荐

    动态验证码教程与实例

    在项目实例中,你可以找到一个完整的动态验证码生成器,它可能包含以下文件: - `config.php`: 配置文件,定义验证码的参数,如长度、字体、颜色等。 - `captcha.php`: 主要的验证码生成脚本,包含了上述的生成逻辑...

    图片验证码生成实例带有横杠干扰

    JQuery调用后台的java类产生图片验证码。 很实用,下载后可以直接运行的实例! 有什么好的建议可以Q我623791070 谢谢

    表单验证码生成_js

    本篇文章将详细讲解基于JavaScript(js)实现的表单验证码生成技术,以及如何自定义字符并创建高效实例。 验证码的核心功能是生成一组随机的、难以被程序自动识别的字符序列,通常包括字母、数字、甚至图形。...

    ASP验证码源码实例.RAR

    在这个“ASP验证码源码实例.RAR”压缩包中,包含了创建一个简单数字验证码的ASP源代码,适合初学者学习和参考。 验证码的主要目的是为了防止自动化程序(如机器人)对网站进行恶意操作,例如注册、投票或发送垃圾...

    jsp随机验证码生成测试

    本项目“jsp随机验证码生成测试”提供了一个基于Java Server Pages (JSP) 实现的验证码生成实例,旨在帮助开发者理解和实践如何在Web应用程序中集成验证码功能。 验证码的主要目的是验证用户是人而不是计算机程序。...

    验证码生成.zip

    本实例将介绍生成英文和数字混合的验证码。运行程序,在页面中将显示英文和数字混合的验证码,用户只有输入正确的验证码后,才可以完成登录。如果当前生成的验证码不容易辨认,也可以单击“看不清?换一个”超链接...

    无组件生成验证码实例下载(ASP)

    验证码是一种用于防止自动机器人或恶意程序进行欺诈行为的安全机制,常用于网站登录、表单提交等场景。在ASP(Active Server Pages)环境中,...然而,理解基础的验证码生成原理对于任何Web开发者来说都是非常有益的。

    PHP验证码小实例

    这个PHP验证码小实例对于初学者来说是个很好的起点,它涵盖了基本的图像处理、随机数生成和会话管理等概念。在实际应用中,你可能还需要考虑以下几点优化: - **安全性**:增加字符串长度,使用更复杂的字符集,...

    一个php验证码生成类代码.zip

    这个“一个php验证码生成类代码.zip”压缩包中包含了一个PHP验证码生成类,它能够帮助开发者轻松地创建具有背景、干扰元素和随机文本的图像验证码。 验证码类通常包括以下几个核心功能: 1. **生成随机字符串**:...

    .NET验证码生成组件

    "HFSoft.Component.NumberImage.Test"可能是一个测试项目或者包含测试代码的文件夹,用于验证组件的正确性和性能,开发者可以通过运行这些测试来确保验证码生成功能的正常工作。 使用.NET验证码生成组件时,开发者...

    asp.net验证码生成类

    ASP.NET验证码生成类主要用于在Web应用中创建安全的随机字符序列,用于验证用户输入是否有效,防止自动机器人或恶意程序的攻击。此类通常包括几个关键功能,如生成验证码字符串、创建验证码图片以及处理相关的安全...

    java jcaptcha 验证码 生成

    Java JCaptcha验证码生成详解 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的随机字符来验证用户是否为真实的人。在Java开发中,JCaptcha是一个广泛使用的开源库,它提供...

    【ASP.NET编程知识】.NET Core 2.0如何生成图片验证码完整实例.docx

    下面将详细介绍如何在.NET Core 2.0环境下创建一个完整的图片验证码生成实例。 首先,我们需要引入必要的NuGet包。在这个例子中,我们使用了`ZKWeb.System.Drawing`,这是一个.NET Core下的图形处理库,它提供了...

    java随机验证码生成实现实例代码

    Java随机验证码生成实现实例代码 Java随机验证码生成实现实例代码主要介绍了java随机验证码生成实现实例代码的相关资料。下面是对标题和描述中所说的知识点的详细解释: Java随机验证码生成 Java随机验证码生成是...

    java随机动态生成汉字验证码图片的实例代码分享

    总之,使用Java动态生成汉字验证码图片涉及随机数生成、汉字选择、图像处理和网络传输等多个技术环节。这个实例代码可以帮助开发者了解和掌握这些技能,提高其在安全领域的开发能力。如果你对这个主题感兴趣,下载并...

    dotnet-HeiCaptcha一个netcore跨平台的图形验证码生成工具包

    **标题与描述解析** 标题中的"dotnet-HeiCaptcha"是一个专为.NET Core设计的图形验证码生成库,强调了其跨平台的特性。...同时,这个开源项目也为.NET开发者提供了一个学习图像处理和验证码生成技术的实例。

    生成验证码的实例详细解释及下载

    在这个实例中,我们主要关注的是`checkcode.asp`文件,这可能是一个基于ASP(Active Server Pages)的验证码生成脚本。ASP是一种微软开发的服务器端脚本语言,用于创建动态网页。 `checkcode.asp`可能是用来生成...

    C#随机生成10以内的加减法验证码实例

    **验证码生成** 在`GenerateCheckCode`方法中,首先定义了两个随机整数`intFirst`和`intSec`,其取值范围为1到10。接下来,根据随机数决定生成加法还是减法运算: - 如果是减法,则需要确保被减数大于减数,以...

    ASP汉字验证码实例

    总之,ASP汉字验证码实例是一个结合了随机数生成、图像处理和服务器验证的综合性实践项目,对于学习ASP编程和提升网站安全性具有重要意义。通过深入研究和实践,你可以掌握创建高效、安全的验证码服务的关键技术。

    使用页面动态生成图片实例

    5. **验证码生成**: 验证码是一种防止机器人自动操作的安全机制。动态生成验证码通常包括随机生成文本、扭曲变形、添加噪声等步骤,然后转化为图片。例如,PHP 可以使用 GD 库配合随机函数实现,JavaScript 可以使用...

Global site tag (gtag.js) - Google Analytics