SSH生成随机数字验证码的操作步骤

SSH生成随机数字验证码的操作步骤
1、login.jsp页面程序
复制代码代码如下所示:

功能changevalidatecode(obj){
作为一个参数,获取当前时间,没有具体含义。
VaR办法=新的日期()GetTime();
每个请求都需要一个不同的参数,否则它将返回相同的验证代码。
有缓存机制和浏览器,也可以使页面不缓存,所以你没有参数。
obj。src=兰特。actiond =+办法;
}
在表格中加上下列句子:
复制代码代码如下所示:


2类文件,randomnumutil.java生成验证码
复制代码代码如下所示:
进口java.awt.color;
进口java.awt.font;
进口java.awt.graphics;
进口java.awt.image.bufferedimage;
进口java.io.bytearrayinputstream;
进口java.io.bytearrayoutputstream;
进口java.util.random;
进口javax.imageio.imageio;
进口javax.imageio.stream.imageoutputstream;
公共课randomnumutil {
私人从字节数组读取的输入流图像; / /图像
私有字符串STR;验证代码
列兵RandomNumUtil(){
(init);
}
*
*获得randomnumutil例
* /
公共静态RandomNumUtil Instance(){
返回新的randomnumutil();
}
*
*获得验证图片
* /
公众从字节数组读取的输入流的图像(){
返回this.image;
}
*
*获取图片验证码
* /
公共字符串GetString(){
返回this.str;
}
私有空init(){
内存创建图像
int宽度= 85,高度= 20;
BufferedImage图像=新的BufferedImage(宽度,高度,type_int_rgb BufferedImage。);
获取图形上下文
图G = image.getgraphics();
随机生成
随机随机数=新随机数();
设置背景
G.setColor(getrandcolor(200250));
g.fillrect(0, 0,宽度,高度);
字体
g.setfont(新字体(时代新罗马
155随机干扰线,图像的认证码不易被其他程序检测到。
G.setColor(getrandcolor(160200));
对于(int = i 0;i < 155;i + +)
{
int x = random.nextint(宽);
y = random.nextint(高度);
int XL = random.nextint(12);
int YL = random.nextint(12);
G.drawLine(X,Y,X + Y + XL,YL);
}
获取随机验证码(6位)
字符串= 、;
对于(int = i 0;i < 6;i + +){
字符串兰德= string.valueof(random.nextint(10));
srand + =兰特;
身份验证代码是图像显示
g.setcolor(新的颜色(20 + random.nextint(110),20(110),random.nextint + 20 + random.nextint(110))));
调用相同的颜色,可能是因为种子太近,所以只能直接生成。
g.drawstring(Rand,13 *我+ 6,16);
}
赋值/验证码
这力量=站;
图像/效果
G.dispose();
从字节数组读取的输入流输入= null;
写入字节数组的输出流输出=新写入字节数组的输出流();
尝试{
imageoutputstream imageout = imageio.createimageoutputstream(输出);
imageio.write(图像,JPEG
ImageOut.close();
输入=新从字节数组读取的输入流(output.tobytearray());
} catch(异常E){
System.out.println(验证码图片产生的错误:+ e.tostring());
}
这个,图像=输入;图像赋值
}
*
*在给定范围内获得随机颜色
* /
私人色彩getrandcolor(int FC,int BC){
随机随机数=新随机数();
如果(FC > 255)FC = 255;
如果(BC = 255)BC = 255;
int r = FC + random.nextint(公元前FC);
int G = FC + random.nextint(公元前FC);
int b = FC + random.nextint(公元前FC);
返回新的颜色(r,G,b);
}
}

3、randomaction.java行动程序生成验证码
复制代码代码如下所示:
进口java.io.bytearrayinputstream;
进口com.mxl.util.randomnumutil;
进口com.opensymphony.xwork2.actioncontext;
进口com.opensymphony.xwork2.actionsupport;
公共课randomaction扩展ActionSupport {
私人从字节数组读取的输入流InputStream;
公共字符串执行()抛出异常{
randomnumutil rdnu = randomnumutil.instance();
this.setinputstream((rdnu。GetImage)); / /得到一个随机字符串。
actioncontext.getcontext(。getsession)(,)(随机)(rdnu。GetString); / /得到一个随机字符串到HttpSession
返回成功;
}
公共无效setinputstream(从字节数组读取的输入流InputStream){
this.inputstream = InputStream;
}
公众从字节数组读取的输入流getInputStream(){
返回输入流;
}
}

4、loginaction.java验证验证码的作用
复制代码代码如下所示:
私有字符串兰德;以兰德的形式
公共字符串getRand(){
返回兰德;
}
公共无效setrand(字符串兰特){
this.rand =兰特;
}
拆下randomaction.java / /验证码生成随机从会话
字符串随机=(字符串)(actioncontext.getcontext()GetSession(),有(随机));
以下是会话保存代码、验证码、字符串比较和客户输入。
如果(arandom.equals(this.getrand())){
ActionContext.getContext()GetSession(),把(用户
返回成功;
}
{其他
返回错误;
}

5。Struts.xml文件配置
复制代码代码如下所示:
图像/ JPEG
InputStream
6。生成的验证码图片演示(6位数字验证码的实现)
解释uff1a
如果要修改生成的验证代码的数量,需要修改以下位置
第一点:
int宽度= 85,高度= 20;int宽度= 85,高度= 20;
第二点:(int i = 0;i < 6;i +)为(int i=0;i < 6;i +)
数字6,更改为要生成的位数。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部