public class AuthorizationCode extends BaseAction
{
static final long serialVersionUID = 19881218; // 明明的生日
public void getVoid()
throws IOException
{
response.setContentType("image/jpeg");
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(new Color(255, 255, 255));
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font("Comic Sans MS", Font.PLAIN, 18));
// 画边框
g.setColor(this.getRndColor());
// g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(this.getRndColor());
for (int i = 0; i < 10; 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);
}
// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++)
{
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
g.setColor(new Color(127, 127, 127));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
request.getSession().setAttribute("AuthorizationCode", sRand);
// 图象生效
g.dispose();
ServletOutputStream responseOutputStream = response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", responseOutputStream);
// 以下关闭输入流!
responseOutputStream.flush();
responseOutputStream.close();
}
private Color getRndColor()
{// 给定范围获得随机颜色
return new Color(this.rnd(), this.rnd(), this.rnd());
}
/** 随机生成0-255的数字* */
private int rnd()
{
java.util.Random random = new java.util.Random();
return random.nextInt(255);
}
/** 把除了大小写字母和数字外的字符全过滤掉* */
@SuppressWarnings("unused")
private char filter(int k)
{
if (k < 65)
k = 48 + (k % 10);
if (k > 64 && k < 96)
k = 65 + (k % 26);
if (k > 96)
k = 97 + (k % 26);
return (char)k;
}
/** 取得一个随机字体* */
@SuppressWarnings("unused")
private String getRndFontNames()
{
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] k = ge.getAvailableFontFamilyNames();
java.util.Random r = new java.util.Random();
return k[r.nextInt(k.length)];
}
}
分享到:
相关推荐
要实现Struts2中的中文验证码Action,我们需要以下步骤: 1. **配置Struts2**: 首先,确保你的项目已经集成了Struts2框架,并且在`struts.xml`配置文件中添加了Action的配置。Action的配置应包含一个对应的Action类...
在Struts2的配置文件(struts.xml)中,需要为验证码Action添加相应的配置,指定URL映射和返回结果类型。 3. **结果类型**: 生成验证码的Action可能会返回一个"success"结果,对应的视图可能是直接输出验证码...
在这个demo中,会有关于验证码Action的配置,指明其处理的请求路径和对应的视图。 通过这个简单的Struts验证码demo,开发者可以学习如何在实际项目中集成验证码功能,提升网站的安全性。同时,这也是理解Struts框架...
- 验证码Action返回一个`stream`结果类型,使得浏览器可以直接显示生成的验证码图片。 3. **验证验证码**: - 用户输入验证码后,服务器端需要验证输入的值是否与Session中存储的原始验证码一致。 - 如果匹配,...
我们可以使用一个`<img>`标签来显示验证码图片,图片的src属性指向一个Struts2 Action,该Action负责生成并返回验证码的图片。图片可以通过将验证码字符串转换为像素并绘制到图像上实现。 4. **配置Struts2 Action*...
这个Action将调用上面的`CaptchaGenerator`类来生成验证码图像,并将其作为HTTP响应的图像内容返回。 5. **视图渲染**: 在需要显示验证码的视图中,可以使用HTML图像元素指向刚才创建的Action。例如,`...
通过实现BroadcastReceiver类,重写onReceive()方法,注册对应的SMS_RECEIVED ACTION广播,可以监听到接收到的验证码短信。注意,由于安全性和隐私原因,只有用户在应用中明确授权,应用才能监听短信。 4. **UI倒...
在Struts2框架中,我们可以创建一个Action,该Action调用Servlet生成验证码并返回图片。为了实现这个功能,我们需要在struts.xml配置文件中添加一个映射,将特定的请求路径指向生成验证码的Servlet。 3. **SSH2...
对登录的验证码进行验证的完整代码,对于新手很方便,易明白,是基于SSH的使用
5、验证在服务器端,通常在处理用户提交表单的 action 中,会校验用户输入的验证码是否与 session 中的验证码相匹配,以确保安全性。例如: ```java @RequestMapping(value = "/yourAction", method = Request...
其次,需要在控制器的`behaviors()`方法中配置访问规则,确保对验证码Action的访问不受限制。这里使用了`AccessControl`类来设置规则,允许`login`、`error`和`captcha`动作的访问: ```php public function ...
在Android开发中,实现短信验证码自动填充是一项提升用户体验的重要功能。这一特性允许应用程序在接收到短信验证码后,自动将其填入到相应的输入框中,从而减少用户手动输入的步骤,提高验证过程的效率。以下是对这...
### 登录界面的验证码代码详解 #### 一、概述 在现代互联网应用中,为了防止自动化工具或恶意脚本对网站进行攻击或者垃圾注册等行为,通常会在用户登录时加入验证码这一环节。本文将深入分析一份典型的登录界面...
Action的参数(如宽度、高度、长度和随机字符串)可以用来定制验证码的外观和字符集。`result`节点配置了结果类型为`stream`,意味着返回的是一个流,通常用于返回图片内容。`contentType`属性设为`image/jpeg`表示...
验证码的生成和验证可以通过自定义Action或拦截器实现,确保用户输入的验证码与服务器生成的一致。 4. 验证码技术:验证码的主要目的是防止自动化脚本或机器人对系统的非法访问。在这个项目中,验证码可能是通过...
### jsp用户登录验证码知识点详解 #### 一、概述 在Web应用开发中,为了防止自动化工具或恶意脚本对登录系统的频繁尝试,通常会在登录界面加入验证码功能。验证码(CAPTCHA)是一种用来区分人与计算机的技术手段。...
2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...
在实际的Struts1.x项目中,可以创建一个专门的Action来处理验证码的生成和验证,然后在对应的JSP页面上使用Struts标签库来调用这个Action。例如,你可能会有一个名为`GenerateCaptchaAction`的类,负责生成验证码,...
该Action类是生成验证码的核心组件,主要实现了生成验证码图片的功能。 - **导入必要的包**: - `java.awt.*`:用于绘制验证码图片。 - `java.awt.image.BufferedImage`:表示图像的对象。 - `java.io.*`:处理...
3. **用户提交**:用户输入验证码后,Action接收到请求,从Session中获取预先生成的验证码,并与用户输入的值进行对比。 4. **错误处理**:如果输入的验证码不匹配,返回错误信息,并可能清除Session中的验证码以...