用户登录注册之验证码技术实现

发布时间:   来源:文档文库   
字号:
用户登录注册之验证码技术实现

对于一些恶意强暴破解密码的行为(即通过硬性尝试用户名密码进行破解),可以采用验证码对其进行抵御,对于一些程序可以识别验证码,则需要对验证码形式进行多样化设计。
注!!拿到的页面是只有图片,需要用另一个页面引用图片页面示例:用户登录时设置验证码代码实现:页面function_change({
varimgEle=document.getElementById("img";imgEle.src=
"${pageContext.request.contextPath}/user_getVerify.action?a="
+newDate(.getTime(;}


action="${pageContext.request.contextPath}/user_login.action"method="post">


style="HEIGHT:28px">验证码:
size="1"/>

src="${pageContext.request.contextPath}/user_getVerify.action">


一张

28px">style="FONT-WEIGHT:bold;VISIBILITY:hidden;COLOR:white">请输入验证码


2.action操作//获得验证码
publicvoidgetVerify(throwsIOException{
HttpServletRequest
request=ServletActionContext.getRequest(;
HttpServletResponse
response=ServletActionContext.getResponse(;
request.getSession(.setAttribute("session_vcode",vc.g
VerifyCodevc=newVerifyCode(;
BufferedImageimage=vc.getImage(;//获得图片
etText(;//将验证码内容放在域对象里面
VerifyCode.output(image,
response.getOutputStream(;}
publicStringlogin({
HttpServletRequest
request=ServletActionContext.getRequest(;
StringsessionCode=(String
request.getSession(.getAttribute("session_vcode";
StringparamCode=
request.getParameter("verifyCode";



if(!paramCode.equalsIgnoreCase(sessionCode{}
UseruserExit=userService.login(user;if(userExit!=null{
if(!userExit.isState({
request.setAttribute("msg","您尚未激活,请到request.setAttribute("msg","验证码错误!";return"login";
邮箱"+userExit.getEmail(+"激活!";}
request=ServletActionContext.getRequest(;request.getSession(.setAttribute("user",return"loginerror";
userExit;}
return"loginsuccess";
}else{}
return"login";
3.验证码代码实现importjava.awt.BasicStroke;

importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;
importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.io.OutputStream;importjava.util.Random;importjavax.imageio.ImageIO;
publicclassVerifyCode{
privateintw=70;privateinth=35;
privateRandomr=newRandom(;
//{"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312"}
privateString[]fontNames={"宋体","华文楷体","黑体
","微软雅黑","楷体_GB2312"};
//可选字符
privateStringcodes=
"23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
//背景色


privateColorbgColor=newColor(255,255,255;//验证码上的文本privateStringtext;
//生成随机的颜色
privateColorrandomColor({}
//生成随机的字体
privateFontrandomFont({
intindex=r.nextInt(fontNames.length;
StringfontName=fontNames[index];//生成随机的字intred=r.nextInt(150;intgreen=r.nextInt(150;intblue=r.nextInt(150;
returnnewColor(red,green,blue;
体名称
intstyle=r.nextInt(4;//生成随机的样式,0(无样式,
1(粗体,2(斜体,3(粗体+斜体}
intsize=r.nextInt(5+24;//生成随机字号,24~28returnnewFont(fontName,style,size;


//画干扰线
privatevoiddrawLine(BufferedImageimage{
intnum=3;//一共画3
Graphics2Dg2=(Graphics2Dimage.getGraphics(;for(inti=0;i生成两个点的坐标,4
个值}
//随机生成一个字符privatecharrandomChar({}
//创建BufferedImage
intindex=r.nextInt(codes.length(;returncodes.charAt(index;}
intx1=r.nextInt(w;inty1=r.nextInt(h;intx2=r.nextInt(w;inty2=r.nextInt(h;
g2.setStroke(newBasicStroke(1.5F;g2.setColor(Color.BLUE;//干扰线是蓝色g2.drawLine(x1,y1,x2,y2;//画线


privateBufferedImagecreateImage({
BufferedImageimage=newBufferedImage(w,h,
BufferedImage.TYPE_INT_RGB;
Graphics2Dg2=(Graphics2Dimage.getGraphics(;g2.setColor(this.bgColor;g2.fillRect(0,0,w,h;returnimage;
}
//调用这个方法得到验证码publicBufferedImagegetImage({
BufferedImageimage=createImage(;//创建图片缓
冲区
Graphics2Dg2=
(Graphics2Dimage.getGraphics(;//得到绘制环境
StringBuildersb=newStringBuilder(;//用来装载生
成的验证码文本
//向图片中画4个字符
for(inti=0;i<4;i++{//循环四次,每次生成一个
字符
Strings=randomChar(+"";//随机生成一个字母sb.append(s;//把字母添加到sb
floatx=i*1.0F*w/4;//设置当前字符的x轴坐标



}
g2.setFont(randomFont(;//设置随机字体g2.setColor(randomColor(;//设置随机颜色g2.drawString(s,x,h-5;//画图
this.text=sb.toString(;//把生成的字符串赋给了
this.text}
//返回验证码图片上的文本publicStringgetText({}
//保存图片到指定的输出流
publicstaticvoidoutput(BufferedImageimage,returntext;
drawLine(image;//添加干扰线returnimage;

OutputStreamout}
throwsIOException{
ImageIO.write(image,"JPEG",out;
}4.效果

本文来源:https://www.2haoxitong.net/k/doc/93435f5a53ea551810a6f524ccbff121dd36c5e0.html

《用户登录注册之验证码技术实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式