利用struts2框架写的,把验证功能的代码写成了action,在网页上直接调用这个<img scr="***.action">就可以获得验证码图像,而验证码的内容则直接setAttribute到session里面了,到网页上直接调用就行了,或者用el表达式,按这个步骤做就会有下面的效果:
action的代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
public class ValidationCodeAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware
{
private HttpServletRequest request;
private HttpServletResponse response;
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
// 图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码
private String codeChars = "%#23456789abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ";
// 返回一个随机颜色(Color对象)
private Color getRandomColor(int minColor, int maxColor)
{
Random random = new Random();
// 保存minColor最大不会超过255
if (minColor > 255)
minColor = 255;
// 保存minColor最大不会超过255
if (maxColor > 255)
maxColor = 255;
// 获得红色的随机颜色值
int red = minColor + random.nextInt(maxColor - minColor);
// 获得绿色的随机颜色值
int green = minColor + random.nextInt(maxColor - minColor);
// 获得蓝色的随机颜色值
int blue = minColor + random.nextInt(maxColor - minColor);
return new Color(red, green, blue);
}
public String execute() throws Exception
{
// 获得验证码集合的长度
int charsLength = codeChars.length();
// 下面三条记录是关闭客户端浏览器的缓冲区
// 这三条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这三条语句的支持也不同
// 因此,为了保险起见,建议同时使用这三条语句来关闭浏览器的缓冲区
response.setHeader("ragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 设置图形验证码的长和宽(图形的大小)
int width = 90, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();// 获得用于输出文字的Graphics对象
Random random = new Random();
g.setColor(getRandomColor(180, 250));// 随机设置要填充的颜色
g.fillRect(0, 0, width, height);// 填充图形背景
// 设置初始字体
g.setFont(new Font("Times New Roman", Font.ITALIC, height));
g.setColor(getRandomColor(120, 180));// 随机设置字体颜色
// 用于保存最后随机生成的验证码
StringBuilder validationCode = new StringBuilder();
// 验证码的随机字体
String[] fontNames = { "Times New Roman", "Book antiqua", "Arial" };
// 随机生成3个到5个验证码
for (int i = 0; i < 3 + random.nextInt(3); i++)
{
// 随机设置当前验证码的字符的字体
g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,
height));
// 随机获得当前验证码的字符
char codeChar = codeChars.charAt(random.nextInt(charsLength));
validationCode.append(codeChar);
// 随机设置当前验证码字符的颜色
g.setColor(getRandomColor(10, 100));
// 在图形上输出验证码字符,x和y都是随机生成的
g.drawString(String.valueOf(codeChar), 16 * i + random.nextInt(7),
height - random.nextInt(6));
}
HttpSession session = request.getSession();
session.setMaxInactiveInterval(5 * 60); // 设置session对象5分钟失效
// 将验证码保存在session对象中,key为validation_code
session.setAttribute("validation_code", validationCode.toString());
g.dispose();// 关闭Graphics对象
OutputStream os = response.getOutputStream();
ImageIO.write(image, "JPEG", os);// 以JPEG格式向客户端发送图形验证码
return null;
}
}
struts.xml的代码:只要没有重复的名字贴到里面就可以了
<action name="validate_code" class="com.hyy.action.ValidationCodeAction">
</action>
最后就是jsp放图片地方的代码了:
输入右面的认证码:<input type="text" name="oneUserInfo.verifyCodeDigit" />
<img src="validate_code.action" />
- 大小: 7.8 KB
分享到:
相关推荐
layui 实现登陆界面验证码 layui 是一个流行的前端框架,它提供了很...在本文中,我们详细介绍了 layui 实现登陆界面验证码的方法。通过使用 layui 的表单组件和 canvas 元素,我们可以轻松地实现验证码的生成和验证。
在这个类中,我们重写了 `OnInit` 方法,以便在页面初始化时执行某些操作。 在 `Page_Load` 事件中,我们调用了 `CreateCheckCodeImage` 方法,该方法将生成验证码图片,并将其显示在网页上。该方法将调用 `...
C# Winform 登陆框验证码的实现方法 本文将详细介绍 C# Winform 登陆框验证码的实现方法,这将有助于开发者快速实现验证码功能。下面将详细介绍实现方法的步骤和代码。 验证码的实现方法 首先,新建一个简洁的 ...
本主题将详细介绍如何在JSP(Java Server Pages)环境中实现一个简单的登陆页面验证码功能。 首先,验证码的核心是生成一个随机的、不可预测的图像,这个图像通常包含一些扭曲的字母或数字,用户需要手动输入这些...
以下是一个简单的JavaScript验证码实现示例: ```javascript document.addEventListener('DOMContentLoaded', function() { var canvas = document.getElementById('captcha'); var ctx = canvas.getContext('2d'...
JSP登陆页面实现验证码登陆的代码 JSP登陆页面实现验证码登陆的代码
google扩展程序利用tesseract实现登陆页面验证码识别。google扩展程序页面,开发者模式下,加载已解压的扩展程序,打开带有验证码的网站,验证码框即自动填写。 问题:识别速度较慢1-3秒,但是同一页面的第二次识别...
增加条线是常见的复杂化验证码的方法,这些线条可以干扰背景,使得机器难以自动识别出验证码上的数字或字母。这种设计虽然增加了用户识别的难度,但对防止自动化攻击来说是必要的。 验证码的实现技术通常涉及到以下...
jsp验证码实现源代码2008年05月06日 星期二 10:06在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式。
本项目“实现验证码功能的登陆界面”是基于Java技术,利用Servlet实现的一个简单的验证码登录界面,旨在帮助学习者理解验证码的工作原理和实现方法。 验证码的主要目的是增加一个验证步骤,确保用户是真实的、有...
在学习这些验证码实现时,你可以通过查看压缩包中的"validateCode"源码文件来深入了解每个验证码的具体实现细节。同时,"截图"可能包含各个验证码的示例图像,帮助理解其外观和工作原理。此外,"关注科帮网获取更多...
- `code.py`:通过Selenium获取验证码图片,并使用`TesseractPy3.py`中的函数识别验证码,实现网站自动化登录。 **示例代码**(部分): ```python # TesseractPy3.py import os import subprocess from PIL ...
本文实例讲述了Bootstrap实现前端登录页面带验证码功能。分享给大家供大家参考,具体如下: Bootstrap有自定义的验证码样式,在前端页面可以直接使用,他的css、js在使用前要在开头引入 上代码: <!DOCTYPE ...
在这个Java实现的案例中,我们探讨的是如何动态生成登录界面的验证码。 动态验证码的核心在于它的随机性和一次性。每次用户请求时,服务器会生成一个新的、独特的验证码图像,这样即使攻击者截取了这次的验证码,也...
- **绘制验证码**:将随机生成的字符绘制到图像上,使用`Graphics`类的`DrawString`方法,并调整字体、字号、颜色和角度以增加可读性难度。 - **添加干扰线**:为了增加破解难度,可以在图像上随机绘制一些线条,...
标题中的“extjs 登录页面+验证码”表明我们要讨论的是使用ExtJS框架构建的一个登录页面,其中包含了验证码功能。ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序,它提供了丰富的用户界面组件和强大的...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。...基于SSM实现登陆页面验证码(源码).zip
在这个"JSP+servlet验证码登陆"的场景中,我们主要讨论的是如何在MVC(Model-View-Controller)架构下实现一个安全的登录系统,特别是涉及到验证码的生成和验证。 验证码是一种防止恶意自动程序(如机器人)进行...
本文主要介绍了 Spring Boot 登陆页面图片验证码简单 Web 项目实现的相关知识点,包括项目概况、验证码工具类、验证码生成、图片验证码实现等方面的详细说明。 一、项目概况 Spring Boot 登陆页面图片验证码简单 ...
此外,为了避免自动化工具通过截图识别验证码,可以使用扭曲、倾斜、加噪等方法使验证码更难以被机器识别。 6. **用户体验**:验证码的设计也应考虑到用户体验,避免过于复杂或难以辨认的验证码,以免给正常用户...