欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

验证码action

程序员文章站 2022-03-03 08:33:47
...
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)];
}

}
相关标签: Cache

上一篇: 技术补充

下一篇: 分治法