java 制作验证码并进行验证实例详解
作者:lqh 发布时间:2023-03-18 11:27:56
标签:java,验证码
java 制作验证码并进行验证实例详解
在注册、登录的页面上经常会出现验证码,为了防止频繁的注册或登录行为。下面是我用java制作的一个验证码,供初学者参考,做完验证码之后,我们可以用ajax进行验证码验证。
功能一:验证码制作的代码,点击图片,验证码进行更换
/**
* 显示验证码图片
*/
public void showCheckCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用业务逻辑
String checkCode = getCheckCode();
//将验证码字符放入session域对象中
req.getSession().setAttribute("checkCode", checkCode);
//图片宽
int width = 80;
//图片高
int height = 30;
//在内存中创建一个图片
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取一个画笔
Graphics g = image.getGraphics();
//设置画笔颜色,用灰色做背景
g.setColor(Color.GRAY);
//向Image中填充灰色
g.fillRect(0,0,width,height);
Random r = new Random();
//设置3条干扰线
for (int i = 0; i < 3; i++) {
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(80));
}
//设置验证码字符串的颜色
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//设置字符的大小
g.setFont(new Font("黑体",Font.BOLD,24));
//在图片中写入验证码字符串
g.drawString(checkCode,15,20);
//将Image对象以PNG格式输出给所有的客户端
ImageIO.write(image,"PNG",resp.getOutputStream());
}
/**
* 获取4位验证码中的4位随机字符串
*/
public static String getCheckCode(){
//验证码中的字符由数字和大小写字母组成
String code = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
Random r = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 4; i++) {
sb.append(code.charAt(r.nextInt(code.length())));
}
return sb.toString();
}
jsp页面
<script type="text/javascript">
function changeCodeImage(img){
img.src = "${pageContext.request.contextPath}/UserServlet?method=showCheckCode&time="+new Date().getTime();
}
</script>
<div class="form-group">
<label for="date" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="writeCode" onkeyup="checkCodeMethod(this.value)" >
</div>
<div class="col-sm-2">
<img src="${pageContext.request.contextPath}/UserServlet?method=showCheckCode" id="checkCodeImage" title="点击换一张" onclick="changeCodeImage(this)" />
</div>
<span id="checkCodeSpan"></span>
</div>
功能二:ajax动态验证验证码
/**
* 验证验证码
*/
public void checkCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取从页面中接收到的验证码参数
String checkCode = req.getParameter("checkCode");
//从session域对象中获取验证码
String sessionCode = (String) req.getSession().getAttribute("checkCode");
//判断验证码是否相同
if (checkCode.equalsIgnoreCase(sessionCode)) {
resp.getWriter().print(true);
}else {
resp.getWriter().print(false);
}
jsp页面
<script type="text/javascript">
function changeCodeImage(img){
img.src = "${pageContext.request.contextPath}/UserServlet?method=showCheckCode&time="+new Date().getTime();
}
function checkCodeMethod(code){
$.get("${pageContext.request.contextPath}/UserServlet?method=checkCode",
{ checkCode: code},
function(data){
if (data == 'true') {
document.getElementById("checkCodeSpan").innerHTML = "<font>验证码正确!</font>";
}else {
document.getElementById("checkCodeSpan").innerHTML = "<font>验证码错误!</font>";
}
}
);
}
</script>
<div class="form-group">
<label for="date" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="writeCode" onkeyup="checkCodeMethod(this.value)" >
</div>
<div class="col-sm-2">
<img src="${pageContext.request.contextPath}/UserServlet?method=showCheckCode" id="checkCodeImage" title="点击换一张" onclick="changeCodeImage(this)" />
</div>
<span id="checkCodeSpan"></span>
</div>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/shuaicihai/article/details/54730590
0
投稿
猜你喜欢
- 有很多同学肯定想学习opencv相关的知识,但是有些情况下每建一次项目都要重新引入下各种文件是不是很苦恼,所以我也面临了这个问题,在网上看到
- 传统方式克隆羊问题现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊。传统方
- 参数校验主要使用两个标签@Validated和@Valid;@Valid是Hibernate的注解校验,@Validated是spring的
- 本文实例讲述了Java * 和AOP应用。分享给大家供大家参考,具体如下:一 点睛 * 在AOP(Aspect Orient Progr
- 项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解,方便进行定时任务的开发概述要使用@Scheduled注解,
- idea默认带的equals和hashcode引起的bug最近因规范需要,统一使用idea,使用的版本为2017.4.建立一个实体类,在添加
- 1. 通过字节流实现文件的拷贝 /** * 通过字节流实现文件的拷贝 * @param sourcePath 源
- 什么是委托?之前写了事件的介绍:https://www.jb51.net/article/59461.htm这里也把委托相关知识也总结一下。
- 在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。使用流程【1】准备工作:在项目的工具包下导入HttpClient
- foreach 循环 list(map)直接上代码:整体需求就是1.分页对象里面有map map里面又有数组对象2.分页对象里面有list
- 一、reservedcodecachesize参数介绍该参数是JvM虚拟机调优中调整内存大小的一个设置参数,值得大小设置直接影响到Code
- 今天来记录一下,在项目中因为基本类型,所产生的bug包装类:8种基本类型的包装类应用场景:数据库建立实体映射多用包装类这两句话是重点:就是建
- 本文实例为大家分享了C#用NPOI导出导入Excel帮助类的具体代码,供大家参考,具体内容如下1、准备工作在管理NuGet程序包中搜索 NP
- 该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、T
- 本文章向大家讲解java中时间的获取和格式化, 一. 获取当前系统时间和日期并格式化输出:import java.util.Dat
- 有参数传递的地方都少不了参数校验。在web开发中,前端
- 一、Shader基础知识1.1、什么是Shader在讲什么是Shader之前我们先看看下面两段代码 这两段代码实现的功能都是提取
- 现实开发中,我们难免遇到跨域问题,以前笔者只知道jsonp这种解决方式,后面听说spring只要加入@CrossOrigin即可解决跨域问题
- 1. 前言我们知道,在日常开发中使用的 HashMap 是线程不安全的,而线程安全类 HashTable 和 SynchronizedMap
- 普通 jar 包的导出1.点击 file 中的project.structor=>选择Artifacts=>+=>选择 j