博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java随机验证吗
阅读量:4954 次
发布时间:2019-06-12

本文共 3582 字,大约阅读时间需要 11 分钟。

package com.java.process.jsp;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.Servlet;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;
//servlet3.0之前必须是在web.xml中配置
 
validateColorServlet
com.atguigu.javaweb.ValidateColorServlet
validateColorServlet
/validateColorServlet
 
//servlet3.0以后就是能够直接用@WebServlet,
@WebServlet("/validateColorServlet")public class ValidateColorServlet extends HttpServlet {public static final String CHECK_CODE_KEY = "CHECK_CODE_KEY";		private static final long serialVersionUID = 1L;		//设置验证图片的宽度, 高度, 验证码的个数	private int width = 152;	private int height = 40;	private int codeCount = 6;		//验证码字体的高度	private int fontHeight = 4;		//验证码中的单个字符基线. 即:验证码中的单个字符位于验证码图形左上角的 (codeX, codeY) 位置处	private int codeX = 0;	private int codeY = 0;		//验证码由哪些字符组成	char [] codeSequence = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz23456789".toCharArray();		//初始化验证码图形属性	public void init(){		fontHeight = height - 2;		codeX = width / (codeCount + 2);		codeY = height - 4;	}	public void service(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		//定义一个类型为 BufferedImage.TYPE_INT_BGR 类型的图像缓存		BufferedImage buffImg = null;		buffImg = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);			//在 buffImg 中创建一个 Graphics2D 图像		Graphics2D graphics = null;		graphics = buffImg.createGraphics();				//设置一个颜色, 使 Graphics2D 对象的兴许图形使用这个颜色		graphics.setColor(Color.WHITE);				//填充一个指定的矩形: x - 要填充矩形的 x 坐标; y - 要填充矩形的 y 坐标; width - 要填充矩形的宽度; height - 要填充矩形的高度		graphics.fillRect(0, 0, width, height);				//创建一个 Font 对象: name - 字体名称; style - Font 的样式常量; size - Font 的点大小		Font font = null;		font = new Font("", Font.BOLD, fontHeight);		//使 Graphics2D 对象的兴许图形使用此字体		graphics.setFont(font);				graphics.setColor(Color.BLACK);				//绘制指定矩形的边框, 绘制出的矩形将比构件宽一个也高一个像素		graphics.drawRect(0, 0, width - 1, height - 1);				//随机产生 15 条干扰线, 使图像中的认证码不易被其他程序探測到		Random random = null;		random = new Random();		graphics.setColor(Color.GREEN);		for(int i = 0; i < 55; i++){			int x = random.nextInt(width);			int y = random.nextInt(height);			int x1 = random.nextInt(20);			int y1 = random.nextInt(20);			graphics.drawLine(x, y, x + x1, y + y1);		}				//创建 randomCode 对象, 用于保存随机产生的验证码, 以便用户登录后进行验证		StringBuffer randomCode;		randomCode = new StringBuffer();				for(int i = 0; i < codeCount; i++){			//得到随机产生的验证码数字			String strRand = null;			strRand = String.valueOf(codeSequence[random.nextInt(36)]);						//把正在产生的随机字符放入到 StringBuffer 中			randomCode.append(strRand);						//用随机产生的颜色将验证码绘制到图像中			graphics.setColor(Color.BLUE);			graphics.drawString(strRand, (i + 1)* codeX, codeY);		}				//再把存放有全部随机字符的 StringBuffer 相应的字符串放入到 HttpSession 中		request.getSession().setAttribute(CHECK_CODE_KEY, randomCode.toString());				//禁止图像缓存		response.setHeader("Pragma", "no-cache");		response.setHeader("Cache-Control", "no-cache");		response.setDateHeader("Expires", 0);				//将图像输出到输出流中		ServletOutputStream sos = null;		sos = response.getOutputStream();		ImageIO.write(buffImg, "jpeg", sos); 		sos.close();	}}

转载于:https://www.cnblogs.com/llguanli/p/8276383.html

你可能感兴趣的文章
P2093 [国家集训队]JZPFAR(KDTree)
查看>>
LOJ#6046. 「雅礼集训 2017 Day8」爷(分块)
查看>>
修改/etc/profile导致常用命令不可用的解决办法
查看>>
querySelector与getElementBy等的区别
查看>>
X86段机制
查看>>
LeetCode:Remove Duplicates from Sorted List
查看>>
刷新加载1
查看>>
ROC-RK3308-CC开发实例总结——HZ711 压力传感器的使用方法
查看>>
MySQL数据备份之mysqldump使用(转)
查看>>
View转化为bitmap
查看>>
关闭Android应用程序[学习笔记一]
查看>>
新手学appium-appium错误截图
查看>>
amchart使用柱状图配置
查看>>
前端时间戳和时间转换
查看>>
二分图——最大不可互相到达数 = 最小路径覆盖数
查看>>
C#中抽象类和接口的区别(二)
查看>>
一、线性结构
查看>>
[SPOJ2021] Moving Pebbles
查看>>
Log4Net不同日志类型写入到不同文件
查看>>
VR AR MR的未来
查看>>