java ee如何用VeriyCodeUtils类获取验证码图片?
Admin 2023-06-05 群英技术资讯 1008 次浏览
这篇文章主要讲解了“java ee如何用VeriyCodeUtils类获取验证码图片?”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。昨晚在csdn看到一位前辈写一个ajax+servlet+jsp验证,顿时心血来潮,在阅读前辈的代码下我亲手体验一下,做了一个验证码生成工具类,以供大家做个参考。
1、添加VeriyCodeUtils类生成验证码图像
package com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
*
* @author hubiao
* 验证码生成器
* 用到API
* BufferedImage 创建一个图像
* Graphics2D 绘制
* fillRect(x,y,width,height);背景
* font()字体
* drawRect();边框
* drawLine();线
* drwaString:图像数据
* ImageIO 生成图像
*/
public class VeriyCodeUtils {
/**
* @param output 保存验证图像的流
* @return 验证码
*/
public static String newVeriyCode(OutputStream output)
{
int width = 90;
int height = 40;
int codeCount = 5;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
//创建图像对象,8位RGB
BufferedImage buffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//通过Crapahices来绘制图像到BufferedImage中
Graphics2D gra = buffered.createGraphics();
//设置图片背景:白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height);
//设置字体,字体大小根据图片高度决定
gra.setFont(new Font("Fixedsys",Font.PLAIN,height-2));
//设置边框:黑色,1cm
gra.setColor(Color.BLACK);
gra.drawRect(0, 0, width-1, height-1);
//生成10条黑色干扰线
gra.setColor(Color.BLACK);
Random ran = new Random();
for(int i = 0; i < 70;i++)
{
int x = ran.nextInt(255);
int y = ran.nextInt(255);
int x1 = ran.nextInt(255);
int y1 = ran.nextInt(255);
gra.drawLine(x, y,x+x1, y+y1);//画直线
}
//生成验证码
StringBuffer sb = new StringBuffer();
int r = 0,g = 0,b = 0;
for(int i = 0; i < codeCount; i++)
{
String strRand = String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);
//对每位验证码都生成不同的颜色,增加识别系统难度
r = ran.nextInt(255);
g = ran.nextInt(255);
b = ran.nextInt(255);
gra.setColor(new Color(r, g, b));
gra.drawString(strRand, (i+1)*13, height-4);
sb.append(strRand);
}
try {
ImageIO.write(buffered, "jpeg", output);
} catch (Exception e) {
throw new RuntimeException(e);
}
return sb.toString();
}
}
2、servlet使用验证码
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//禁止图像缓存
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
//生成验证码图像
String veriyCode = VeriyCodeUtils.newVeriyCode(resp.getOutputStream());
//将验证码保存到session中
HttpSession session = req.getSession();
session.setAttribute("validateCode", veriyCode);
}
3、JSP页面使用验证码
</head>
<script type="text/javascript">
function createCode()
{
var t = new Date().getTime();//防止页面缓存,使用时间搓
var srcImg = document.getElementById("srcImg");
srcImg.src="/ImgVeifyWeb/vity.do?"+t;
}
</script>
<body>
<h1>${requestScope.code}</h1>
<img id="srcImg" src="<c:url value="/vity.do"></c:url>" /> #这里使用直接让img访问servlet,通过response响应一个图像流
<a href="##" rel="external nofollow" id="codeId" onclick="createCode()">换一张</a>
<form action="<c:url value="/hello.do"></c:url>" method="post">
<input type="text" name="codeVify"/>
<input type="submit" value="提交"/>
</form>
</body>
4、校验验证码
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
Object validateCode = session.getAttribute("validateCode");
System.out.println(validateCode);
String codeVify = req.getParameter("codeVify");
if(codeVify==null || codeVify.equals(""))
{
req.setAttribute("code","验证证不能为空");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}else if(!validateCode.toString().equalsIgnoreCase(codeVify))
{
req.setAttribute("code","验证证错误");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}
System.out.println("下面开始 做其他业务操作....");
}
校验图如下:

关于“java ee如何用VeriyCodeUtils类获取验证码图片?”就介绍到这了,如果大家觉得不错可以参考了解看看,如果想要了解更多,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了jsp实现用户自动登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了jsp cookie+session实现简易自动登录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了jsp实现登录界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天小编就为大家分享一篇关于在JSP页面中动态生成图片验证码的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
这篇文章主要为大家详细介绍了JSP+Servlet实现文件上传到服务器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008