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(); } }
当然这还需要改进成平常见到的验证码 形式,还需要努力
猜你喜欢
- 前言前段时间因为工作的需要用到Spring事件,翻翻文档将功能实现了,但是存在少许理解不畅的地方,今天有空来梳理梳理。需求背景叶子同学在新入
- 说明本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时自动弹开页面(URL自己定义)。可以自定义监控持续分钟数,同时还可以通过多线程
- 前言公司的邮件系统用的是 * 的 Lotus notes, 你敢信?最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前
- 本文实例为大家分享了Unity Shader序列帧动画效果的具体代码,供大家参考,具体内容如下 实现原理主要的思想是设置显示UV
- Spring之动态注册bean什么场景下,需要主动向Spring容器注册bean呢?如我之前做个的一个支持扫表的基础平台,使用者只需要添加基
- 目录一、Eureka概述1、Eureka特点2、Eureka两大组件3、Eureka三大角色二、Eureka Server服务注册中心1、p
- 线程状态NEW:刚创建未启动的线程RUNNABLE:正在执行状态BLOCKED:处于阻塞状态的线程WAITING:正在等待另一个线程执行特定
- Java高德地图Api的使用使用高德经纬度获取地址信息一些准备用到的常量 /** *
- 演示1 - 代理创建器public class A17 { public static void main(Str
- 前言平时日常开发用得最多是Http通讯,接口调试也比较简单的,也有比较强大的框架支持(OkHttp)。个人平时用到socket通讯的地方是A
- 前言:项目是使用Java swing开发,可实现基础数据维护用户登录、系统首页酒店信息管理、主要模块是开房管理、退房管理、房间信息管理、顾客
- 近几天又温习了一下SpringMVC的运行机制以及原理我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)
- MyBatis 获取子类的属性这里有个model类:基类public class user { pu
- public class BeanDefinitionHolder implements BeanMetadataElement { &nb
- 一个简单的微服务架构图本文设计的 Spring Cloud 版本以及用到的 Spring Cloud 组件Spring Cloud Hoxt
- 本文实例讲述了Java实现的双向匹配分词算法。分享给大家供大家参考,具体如下:目前比较流行的几大分词算法有:基于字符串匹配的分词方法、基于理
- java 多线程死锁 相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现
- package com.videobackend.controller;import java.io.File;import java.io
- Redis模糊匹配批量删除操作,使用RedisTemplate操作: public void deleteByPrex(String pre
- 具体详细介绍请看下文:在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Common