Jsp servlet验证码工具类分享

2023-12-07 0 397

昨晚在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(\”下面开始 做其他业务操作….\”);
}

校验图如下:

Jsp servlet验证码工具类分享

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持悠久资源网。

您可能感兴趣的文章:

  • 使用easyui从servlet传递json数据到前端页面的两种方法
  • jsp+servlet实现猜数字游戏
  • servlet+jsp实现过滤器 防止用户未登录访问
  • javascript与jsp发送请求到servlet的几种方式实例
  • jsp页面中获取servlet请求中的参数的办法详解
  • Jsp+Servlet实现文件上传下载 删除上传文件(三)
  • Jsp+Servlet实现文件上传下载 文件上传(一)
  • Java,JSP,Servlet获取当前工程路径(绝对路径)问题解析
  • Servlet返回的数据js解析2种方法

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 JSP编程 Jsp servlet验证码工具类分享 https://www.u-9.cn/biancheng/jsp/127294.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务