java Servlet 实现动态验证码图片示例
程序员文章站
2024-03-05 19:15:07
整理文档,搜刮出一个java servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。
package com.hacker;
import j...
整理文档,搜刮出一个java servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。
package com.hacker; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image.bufferedimage; import java.io.bufferedreader; import java.io.bytearrayoutputstream; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.outputstream; import java.net.urlencoder; import java.util.date; import java.util.locale; import java.util.random; import javax.imageio.imageio; import javax.servlet.servletexception; import javax.servlet.servletoutputstream; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import com.bean.student; public class hackerservlet extends httpservlet { //验证码图片的宽度。 private int width=60; //验证码图片的高度。 private int height=20; @override protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception { bufferedimage buffimg=new bufferedimage(width,height, bufferedimage.type_int_rgb); graphics2d g=buffimg.creategraphics(); //创建一个随机数生成器类。 random random=new random(); g.setcolor(color.white); g.fillrect(0,0,width,height); //创建字体,字体的大小应该根据图片的高度来定。 font font=new font("times new roman",font.plain,18); //设置字体。 g.setfont(font); //画边框。 g.setcolor(color.black); g.drawrect(0,0,width-1,height-1); //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setcolor(color.gray); for (int i=0;i<160;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); } //randomcode用于保存随机产生的验证码,以便用户登录后进行验证。 stringbuffer randomcode=new stringbuffer(); int red=0,green=0,blue=0; //随机产生4位数字的验证码。 for (int i=0;i<4;i++) { //得到随机产生的验证码数字。 string strrand=string.valueof(random.nextint(10)); //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red=random.nextint(110); green=random.nextint(50); blue=random.nextint(50); //用随机产生的颜色将验证码绘制到图像中。 g.setcolor(new color(red,green,blue)); g.drawstring(strrand,13*i+6,16); //将产生的四个随机数组合在一起。 randomcode.append(strrand); } //将四位数字的验证码保存到session中。 httpsession session=req.getsession(); session.setattribute("randomcode",randomcode.tostring()); //禁止图像缓存。 resp.setheader("pragma","no-cache"); resp.setheader("cache-control","no-cache"); resp.setdateheader("expires", 0); resp.setcontenttype("img/jpg"); //将图像输出到servlet输出流中。 servletoutputstream sos=resp.getoutputstream(); imageio.write(buffimg, "jpg",sos); sos.close(); } }
当然这还需要改进成平常见到的验证码 形式,还需要努力
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。