web验证码

1.页面使用方式

步骤一:在需要添加验证码的位置添加img标签

<img title="看不清?点击更换图片" style="cursor: pointer" src="rand.action" id="gauthcode"/>

步骤二:<head>中添加js,实现页面加载时获取验证码

<script type="text/javascript"> $(function(){         $("#gauthcode").click(function(){                  //获取当前的时间作为参数,无具体意义 var timenow = new Date().getTime(); //每次请求需要一个不同的参数,否则可能会返回同样的验证码 //这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。 $(this).prop("src","rand.action?d="+timenow);         }); }); </script>

2.struts2 action

package com.thtf.lotterymanager.authcode.action;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.imageio.stream.ImageOutputStream;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**

*/

public class RandomNoAction extends ActionSupport {

private ByteArrayInputStream inputStream;

private String d;

public String execute() throws Exception {

// 在内存中创建图象

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(getRandColor(200, 250));

g.fillRect(0, 0, width, height);

// 设定字体

g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160, 200));

for (int i = 0; i < 155; 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);

}

// 取随机产生的认证码(5位数字)

String sRand = "";

for (int i = 0; i < 4; i++) {

String rand = String.valueOf(random.nextInt(10));

sRand += rand;

// 将认证码显示到图象中

g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));

// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.drawString(rand, 13 * i + 6, 16);

}

// 将认证码存入SESSION

ActionContext.getContext().getSession().put("rand", sRand);

// 图象生效

g.dispose();

ByteArrayOutputStream output = new ByteArrayOutputStream();

ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);

ImageIO.write(image, "JPEG", imageOut);

imageOut.close();

ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());

this.setInputStream(input);

return SUCCESS;

}

/*

  • 给定范围获得随机颜色

*/

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);

}

public void setInputStream(ByteArrayInputStream inputStream) {

this.inputStream = inputStream;

}

public ByteArrayInputStream getInputStream() {

return inputStream;

}

public String getD() {

return d;

}

public void setD(String d) {

this.d = d;

}

}

2.struts2 配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="authcode" extends="struts-default">

<action name="rand" class="com.thtf.lotterymanager.authcode.action.RandomNoAction">

<result type="stream">

<param name="contentType">image/jpeg</param>

<param name="inputName">inputStream</param>

</result>

</action>

</package>

</struts>

转载于:https://my.oschina.net/mrq/blog/3005498

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值