现在学习struts2,根据网上的资料通过struts2来做了一个验证码,资料都是很久的了,自己学习逻辑和思维方式。
有人推荐kaptcha插件制作验证码,没有尝试过呢,听说很强大,下一步试一试,现在贴出我自己的代码。
html页面:
<div id="jpeg" >
<span>这个是我自己做的验证码:</span>
<img src="myimage.action" alt="验证码" style="border: 1px;"/>
</div>
struts2 Action:
package com.sanqing.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MyImage extends ActionSupport {
public String execute() throws Exception {
HttpServletResponse httpServletResponse = ServletActionContext.getResponse();
httpServletResponse.setContentType("image/jpeg");
//设置页面不缓存
httpServletResponse.setHeader("Pragma", "No-cache");
httpServletResponse.setHeader("Cache-Control", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
//在内存中创建图像,就像一个带画笔的画布
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文,就像获得画笔
Graphics2D g=image.createGraphics();
//设置画笔颜色,背景颜色浅点
g.setColor(getRandColor(200,250));
//在画布上画一个矩形,把整个画布都覆盖住
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
Random random=new Random();
for(int i=0;i<100;i++){//一百条干扰线
int sx=random.nextInt(width);
int sy=random.nextInt(height);
int ex=random.nextInt(10);
int ey=random.nextInt(10);
if(i%25==0){
g.setColor(getRandColor(150+i/5,220));
}
//画线
g.drawLine(sx, sy, ex, ey);
}
//获得验证码
StringBuffer ransb=new StringBuffer();
char[] ranChar="ABCDEFG23HGKLMN4567PQRST89UVWXYZ".toCharArray();
int len=ranChar.length;
Random rand=new Random();
for(int i=0;i<4;i++){
String temchar=String.valueOf(ranChar[rand.nextInt(len)]);
ransb.append(temchar);
g.setColor(getRandColor(30,250));
g.drawString(temchar, 13 * i + 6, 16);
}
// 图象生效
g.dispose();
OutputStream out=httpServletResponse.getOutputStream();
//jsp页面中可以这么写,就不会报IllegalStateException错误。
//ImageIO.write(image, "JPEG", response.getOutputStream());
// output.flush();
// out.clear();
// out = pageContext.pushBody();
/***
* 给定范围获得随机颜色
* @param fc 起始范围
* @param bc 结束范围
* @return 颜色对象
*/
private 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);
}
}
分享到:
相关推荐
验证码版本的引入,则意味着该软件需要处理网站的安全机制。验证码是为了防止恶意程序自动操作而设置的一道防线,它要求用户输入图片或音频中显示的随机字符或数字。因此,挂机助手需要有解析验证码的功能,才能成功...
通过实践,你可以逐步提升自己的编程技能,同时对验证码识别技术有更深入的理解。 在content.txt文件中,可能包含了源码的具体实现细节,如算法描述、代码注释等,是深入学习这个例子的重要参考资料。建议仔细阅读...
验证码是网络安全领域中的一种常见机制,用于防止自动化程序(如机器人)进行非法操作,例如...通过学习并实践提供的"captcha-master"示例,开发者可以快速掌握这一技术,并将其应用于自己的项目中,提升网站的安全性。
比较差的啦 不过对新手还可以了 大家自己看看啦 我也是新手啊
本教程将聚焦于一个常见的应用场景——自定义View来生成随机验证码。验证码是一种用于验证用户身份的安全机制,常用于防止自动化的机器人操作。下面我们将详细讨论如何在Android中实现这个功能。 首先,我们需要...
标题中的“Vb.net做的验证码”指的是使用Vb.net来创建验证码的功能。验证码通常包含随机生成的一串字符或数字,用户需要正确输入这些字符才能完成验证过程。通过这种方式,系统可以确保与之交互的是真实的人而非程序...
在这个小例子中,我们探讨的是如何使用ASP.NET实现一个基于C#的验证码功能。验证码的主要目的是防止自动化程序(如机器人)进行恶意操作,如批量注册、恶意登录等。 验证码通常包含一组随机生成的字母和数字,用户...
通过分析和学习这些代码,开发者可以理解验证码验证的具体实现细节,以便在自己的项目中实现类似的功能。 总的来说,验证码验证是保障在线服务安全的重要手段,通过不断的优化和创新,验证码技术也在不断提升用户...
通过学习和理解这些代码,你可以构建自己的复杂验证码系统。 总的来说,创建一个复杂的.NET验证码涉及到多个方面的编程知识,包括字符串操作、颜色处理、图形绘制、随机数生成以及前端和后端的交互。这个过程不仅...
在给定的资源“常规验证码、滑动验证码、拼图验证码、选字验证码,纯前端验证码”中,我们可以深入探讨这几种验证码的实现原理及其在前端开发中的应用。 1. 常规验证码: 常规验证码通常包含随机生成的一串字符或...
验证码识别技术是网络安全中一种常见的身份验证手段,用于防止恶意自动化程序(如机器人)进行非法操作。汉字验证码识别尤其具有挑战性,因为它涉及到中文字符的多样性以及图像处理的复杂性。下面将详细介绍图像分割...
【标题】"Python-百度莱茨狗python刷狗外挂自己训练的模型验证码识别准确率95%" 提供的关键知识点主要包括Python编程、机器学习模型训练以及验证码识别技术。在这个项目中,开发者使用Python语言创建了一个工具,...
本资源“完美验证码识别系统V3.2.1.zip”提供了一个通用的验证码识别组件,适用于多种验证码类型,包含了详细的教程和调用说明,使得开发者能够更加方便地集成到自己的应用中。 验证码识别主要涉及以下几个关键技术...
由于描述中提到"程序如果跑不起来需要自调",这意味着这个项目可能并不保证所有环境都能直接运行,开发者需要根据自己的具体需求进行适配和调试。 【验证码助手的关键功能】 1. **接收短信**:SmsCodeHelper可能...
验证码在IT领域,尤其是Web开发中扮演着至关重要的角色,它是防止恶意自动化程序(如机器人)进行非法操作的一种有效手段。在PHP中,创建自定义的验证码类可以帮助开发者实现更安全、更个性化的验证功能。这里我们将...
在这里,这意味着你可以获取到验证码程序的完整代码,这对于学习、自定义或改进验证码系统非常有用。对于初学者或者开发者来说,这是一个很好的学习资源,可以通过阅读和分析代码来了解验证码的实现机制。 ...
验证码(CAPTCHA)是一种用于验证用户是否为人类的技术,它通常用于防止自动化程序如...通过学习和分析这样的源码,开发者可以更好地防范验证码系统被破解,同时也能提高自己的验证码设计能力,创建更安全的验证机制。
验证码在IT领域中是一种常见的安全机制,用于防止自动化的机器人或者恶意软件进行非法操作,比如批量注册、垃圾...通过学习这个项目,开发者可以深入理解验证码的工作原理,并具备在自己的Web应用中实现验证码的能力。
BMP是未经压缩的位图格式,256色意味着每个像素可以有256种颜色,这在1990年代早期的计算机图形中常见。 2. **NEATBMP256ValidPic.class.php**:这是一个PHP类文件,很可能包含了处理BMP图像和验证码识别的核心算法...
在这个"易语言次世代验证码系统简单使用实例"中,我们将探讨如何利用易语言构建一个基本的验证码系统。 验证码是一种常用的安全机制,用于验证用户是否为真实的人,防止恶意自动化的机器人或脚本进行操作。次世代...