基于JSPServlet的验证码实现.docx
- 文档编号:8647412
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:5
- 大小:16.75KB
基于JSPServlet的验证码实现.docx
《基于JSPServlet的验证码实现.docx》由会员分享,可在线阅读,更多相关《基于JSPServlet的验证码实现.docx(5页珍藏版)》请在冰豆网上搜索。
基于JSPServlet的验证码实现
基于JSP/Servlet的验证码实现
packagecom.lixia.util.servlet;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importcom.lixia.util.RandomString;
importcom.lixia.util.RequestUtil;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
publicclassVerifyCodeServletextendsHttpServlet{
ColorgetRandColor(intfc,intbc){//给定范围获得随机颜色
Randomrandom=newRandom();
if(fc>255){
fc=255;
}
if(bc>255){
bc=255;
}
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
returnnewColor(r,g,b);
}
//生成随机类
Randomrandom=newRandom();
//Initializeglobalvariables
publicvoidinit()throwsServletException{
}
//ProcesstheHTTPGetrequest
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
HttpSessionsession=request.getSession();
RequestUtilru=newRequestUtil(request);
booleanrefresh="true".equalsIgnoreCase(ru.getString("refresh"));
Stringname="";
Stringconfig_name=this.getServletConfig().getInitParameter("name");
if(config_name==null||config_name.length()<1){
name="VerifyCode";
}else{
name=config_name;
}
intnum=ru.getInt("num",0);
if(refresh||session.getAttribute(name)==null){
if(num<2||num>10){
Stringconfig_num=this.getServletConfig().getInitParameter("num");
if(config_num!
=null){
try{
intn=Integer.parseInt(config_num);
if(n<2||n>10){
num=4;
}else{
num=n;
}
}catch(NumberFormatExceptionnfe){
num=4;
}
}
}
}else{
StringsRand=(String)session.getAttribute(name);
num=sRand.length();
}
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//在内存中创建图象
intwidth=num*18,height=18;
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphicsg=image.getGraphics();
//设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0,0,width,height);
//设定字体
g.setFont(newFont("ComicSansMS",Font.PLAIN,20));
//画边框
//g.setColor(newColor());
//g.drawRect(0,0,width-1,height-1);
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for(inti=0;i<155;i++){
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(12);
intyl=random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
if(refresh||session.getAttribute(name)==null){
RandomStringrandomString=newRandomString();
randomString.setCharset("A-Z0-9");
randomString.setLength(""+num);//指定字符长度
try{
randomString.generateRandomObject();//生成随机数
}catch(Exceptione){
}
StringsRand=randomString.getRandom();//得到随机字符串
drawRandomString(g,sRand);
//将认证码存入SESSION
session.setAttribute(name,sRand);
}else{
StringsRand=(String)session.getAttribute(name);
drawRandomString(g,sRand);
}
//图象生效
g.dispose();
response.setContentType("image/gif");
ServletOutputStreamos=response.getOutputStream();
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(os);
encoder.encode(image);
os.close();
//输出图象到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
}
privatevoiddrawRandomString(Graphicsg,Stringstr){
char[]c=str.toCharArray();
for(inti=0;i //将认证码显示到图象中 g.setColor(newColor(20+random.nextInt(110),20+random .nextInt(110),20+random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(c[i]+"",15*i+6,16); } } //Cleanupresources publicvoiddestroy(){ } } 使用方法: 1、在web.xml中添加Servlet引用 其中name参数表示生成的随机字符保存在Session里的名字,num参数表示默认生成随机字符的位数 以上两个参数也可以以参数传入Serlvet 2、在JSP引用该Serlvet refresh=true'"title="如果无法看清或识别此验证码,请点击重新生成新的验证码"> 1.在启动Weblogic中要加上这个参数-Djava.awt.headless=true,这样才能显示出图片。 2.在catalina.sh中增加CATALINA_OPTS="$CATALINA_OPTS-Djava.awt.headless=true" 我在C: \bea\user_projects\domains\mydomain中的startWebLogic.sh文件中的倒数第二行里加入了-Djava.awt.headless=TRUE ${JAVA_HOME}/bin/java${JAVA_VM}${MEM_ARGS}${JAVA_OPTIONS}-Dweblogic.Name=${SERVER_NAME}-Djava.awt.headless=TRUE-Dweblogic.ProductionModeEnabled=${PRODUCTION_MODE}-Djava.security.policy="${WL_HOME}/server/lib/weblogic.policy"weblogic.Server
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JSPServlet 验证 实现