java Servlet 实现动态验证码图片示例
作者:Mr_Bean 发布时间:2021-07-14 15:14:28
整理文档,搜刮出一个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(); } }
当然这还需要改进成平常见到的验证码 形式,还需要努力


猜你喜欢
- 我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到
- 运行效果C#实现using Android.App;using Android.OS;using Android.Widget;namesp
- 如果不知道,类的静态变量存储在那? 方法的局部变量存储在那? 赶快收藏Java内存区域主要可以分为共享内存,堆、方法区和线程私有内存,虚拟机
- Bluetooth结构1、JAVA层frameworks/base/core/java/android/bluetooth/包含了bluet
- static void Main(string[] args){ Process proc = null
- 游戏音效就是我们在玩游戏时出现的音乐,这个也是每个游戏必备的一部分,但有是你做游戏的背景音乐有间断的感觉的话,我们可以用getCurrent
- 分页使用可以说非常普遍了,有时候会需要非常灵活的方式去开启或关闭分页,尝试使用一 * 解的方式来进行分页。依赖安装需要使用的依赖:Mybati
- 在上一讲中 OkHttp下载文件并带进度条 中,我们知道怎样去下载文件了。那上传文件呢一、编写服务器端在上一讲服务器下新建UploadFil
- 前言我们书接上文,我们在了解LINQ下面有说到在本地查询IEnumerbale主要是用委托来作为传参,而解析型查询IQueryable则用E
- Filter学习Filter功能拦截jsp、静态图片文件、静态html资源文件实现URL级别的权限访问控制过滤敏感词汇压缩相应信息Filte
- 使用场景EntityListeners在jpa中使用,如果你是mybatis是不可以用的它的意义对实体属性变化的跟踪,它提供了保存前,保存后
- 在页面提交到tomcat乱码 解决方法是在tomcat/conf/server.xml中进行配置以tomcat6.0.32为例,需将以下代码
- 今天聊一个小伙伴在星球上的提问:问题不难,解决方案也有很多,因此我决定撸一篇文章和大家仔细说说这个问题。1. 配置文件位置首先小伙伴们要明白
- 创建类的对象 = 类的实例化 = 实例化类类和对象的使用(面向对象思想落地的实现):1.创建类,设计类的成员2.创建类的对象3.通过“对象.
- 茫茫人海千千万万,感谢这一秒你看到这里。希望我的能对你的有所帮助!共勉!愿你在未来的日子,保持热爱,奔赴山海!Java基础知识(多态)多态因
- 前言为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar、zip和7z,本文将介绍在C#中如何对这几种类型的文件
- 本文为大家分享了java门禁系统面向对象程序设计,供大家参考,具体内容如下下面是对门禁系统的介绍:需求1、某公司安装了电子门,要设计门禁系统
- 本文实例为大家分享了Java使用单链表实现约瑟夫环的具体代码,供大家参考,具体内容如下构建一个单向的环形链表思路1.先创建第一个节点, 让f
- 前言当我们在手机上使用360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其
- Java多线程线程的创建1.继承Thread2.实现Runnable3.实现Callable使用继承Thread类来开发多线程的应用程序在设