现在网上有很多在用户登陆或注册的时候为了防止程序攻击,加入了动态验证的技术,一般是让用户输入随即生成的验证码来实现。下面是一个用Servlet生成动态验证码的一个实例,可以根据实际需要进行修改。
1、生成动态验证码的Servlet
/** 验证码图片的宽度 */ private int width = 90; /** 验证码图片的高度 */ private int height = 30; /** 验证码字符个数 */ private int codeCount = 4; /** 字符间距 */ private int x = 0; /** 字体高度 */ private int fontHeight; private int codeY; /** 随机码可生成字符 */ char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getCodeCount() { return codeCount; } public void setCodeCount(int codeCount) { this.codeCount = codeCount; } @Override public void execute(Context context) { codeY = height - 4; fontHeight = height - 2; x = width / (codeCount + 1); // 定义图像buffer 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("Fixedsys", Font.PLAIN | Font.BOLD, fontHeight); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.pink); 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; // 随机产生codeCount数字的验证码。 for (int i = 0; i < codeCount; i++) { // 得到随机产生的验证码数字。 String strRand = String.valueOf(codeSequence[random.nextInt(36)]); // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); // 用随机产生的颜色将验证码绘制到图像中。 g.setColor(new Color(red, green, blue)); g.drawString(strRand, (i + 1) * x - 6, codeY); // 将产生的codeCount个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 WebContext webContext = (WebContext)context; HttpSession session = webContext.getRequest().getSession(); session.setAttribute("randomCode", randomCode.toString()); HttpServletResponse resp = webContext.getResponse(); // 禁止图像缓存。 resp.setHeader("Pragma", "no-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0); // 设置响应的类型格式为图片格式 resp.setContentType("image/jpeg"); // 将图像输出到Servlet输出流中。 ServletOutputStream sos = null; try { sos = resp.getOutputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ImageIO.write(buffImg, "jpeg", sos); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
最后,在JSP页面中加入动态生成的图片验证码.
如:
相关推荐
Java实现动态验证码生成
在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人...通过以上步骤,你就可以在Java Web应用中实现一个生成动态GIF验证码的功能。这不仅增强了系统的安全性,也为用户提供了良好的交互体验。
在这个例子中,我们将深入探讨ASP.NET如何实现动态验证码的生成与验证。 首先,我们需要创建一个验证码类,这个类将负责生成随机的字符串和对应的图像。在.NET框架中,我们可以利用`Random`类生成随机数字,然后将...
基于 PHP 的中文 GIF 动态验证码生成器的设计与实现 本文介绍了基于 PHP 的中文 GIF 动态验证码生成器的设计与实现,旨在解决当前验证码生成器安全性较弱的问题。文章首先介绍了验证码的概念和当前验证码生成器的...
接下来,我们需要实现验证码的验证功能。这通常涉及以下几个方面: 1. **存储验证码**:生成验证码后,将其安全地存储在一个临时会话或Cookie中,以便后续验证。 2. **用户输入**:用户在看到验证码后,需要手动...
项目概述:动态验证码生成源码,旨在提升团队激励与沟通效率。 核心技术:本项目主要采用Python...简洁描述:本项目是一个基于Python的动态验证码生成实现,通过多种文件类型的协作,提高了团队的工作效率和沟通体验。
这个工具类是用Java语言编写的,因此我们可以深入探讨一下Java验证码生成的相关技术和实现。 验证码(CAPTCHA,Completely Automated Public Turing test to tell Computers and Humans Apart)的主要目标是区分...
- JavaScript中,可以结合Canvas元素生成动态验证码,或者利用WebGL实现更复杂的3D验证码。 4. **验证码服务端与客户端交互**: - 生成验证码时,服务器端创建一个唯一的验证码值,并将其存储在会话(Session)中...
Java 实现动态验证码效果是一种常见的安全机制,用于防止自动化脚本或机器人在网站上进行恶意操作,如批量注册、登录等。在这个过程中,我们将探讨如何使用Java语言来创建一个简单的动态验证码系统,主要包括以下几...
动态生成验证码,并可以将用户输入的验证码和自动生成的进行比对,给出比对的结果
二、动态验证码生成 1. **生成随机字符串**:首先,我们需要创建一个随机的字符串作为验证码。通常这个字符串包含字母和数字,长度可以自定,比如4位。我们可以利用Java的`Random`类和`StringBuilder`生成这个字符串...
本文主要探讨如何使用Servlet技术来模仿CSDN网站的动态验证码生成过程,其中包括数字和字母的组合,以及加减乘三种运算的实现。 首先,我们要理解Servlet的原理。Servlet是Java EE中的一种服务器端组件,用于扩展...
在本项目中,我们探讨的是一个使用C#编程语言实现的验证码生成程序,它适用于Windows环境,可以方便地集成到各种Web应用程序中。 首先,验证码的生成通常包括以下几个关键步骤: 1. **随机字符生成**:验证码通常...
在本主题中,我们将深入探讨如何使用JavaScript实现一个页面动态验证码。验证码的主要目的是防止自动化的机器人程序对网站进行恶意操作,例如批量注册、垃圾评论等。 验证码通常包括一些随机生成的字符或数字,用户...
JSP是Java的一种视图技术,用于生成动态网页。在JSP页面中,开发者可以混合HTML、CSS和Java代码。在本案例中,JSP可能用于生成包含验证码图像的HTML页面。通过在JSP中嵌入Java脚本,我们可以生成随机数字或字母组合...
在本文中,我们将深入探讨验证码的工作原理,以及如何使用编程技术来实现一个图片验证码生成器。 验证码的主要目标是防止自动化程序(如机器人或爬虫)进行恶意操作,如批量注册、刷票或垃圾邮件发送。它们通过要求...
在Java中实现验证码生成,通常涉及到以下几个核心知识点: 1. **随机数生成**:验证码中的字符通常是随机选取的。Java提供了`java.util.Random`类,可以生成指定范围内的随机整数。在这个项目中,我们可以根据需求...
// 验证码生成 QString generateCode() { QString code; for (int i = 0; i ; ++i) { int index = QRandomGenerator::global()->generate() % chars.length(); code.append(chars.mid(index, 1)); } return ...
本压缩包"安卓验证码相关-android本地验证码生成.rar"包含了一些关于在Android平台上实现本地验证码生成的源码和资料。下面将详细介绍验证码的原理以及如何在Android中实现。 验证码的原理: 验证码是一种“全自动...