javaWeb实现图片验证码功能
java程序实现画图
public static void main(String[] args)throws Exception {String message="3456789abcdefghjkmnpqstuvwxy";//通过java生成图片//现实:画画//1 准备画板-//2 铺上画布//3 准备笔//4 画背景//5 画主题//6 撤画布//1 在内存中开辟空间 用于画画BufferedImage bin=new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);//2 获取画笔Graphics2D g=(Graphics2D)bin.getGraphics();//3 涂染料 画背景g.setColor(Color.WHITE);//4 画背景:长方形g.fillRect(2, 2, 195, 45);//5 画主题//随机四五个字符String str="";for (int i = 0; i <4; i++) {str+=message.charAt((int)(Math.random()*message.length()));}//给字符设置文字样式Font font=new Font(null, Font.BOLD, 34);g.setFont(font);//把字符串中的所有字符画到画布上for (int i = 0; i < str.length(); i++) {//笔蘸墨g.setColor(new Color((int)(Math.random()*100+120), (int)(Math.random()*100+120), (int)(Math.random()*100+120)));//写字g.drawString(str.charAt(i)+"", i*45+10, 40);}//画干扰线for (int i = 0; i < (int)(Math.random()*5+5); i++) {g.setColor(new Color((int)(Math.random()*50+120), (int)(Math.random()*50+120), (int)(Math.random()*50+120)));g.drawLine(2, (int)(Math.random()*43+2), 195, (int)(Math.random()*43+2));}//6 创建流与目的文件关联File muDiFile=new File("E:\\imgs\\"+(int)(Math.random()*100+120)+".jpg");FileOutputStream fout=new FileOutputStream(muDiFile);//把内存中BufferedImage中的信息通过输出流写道目的文件中ImageIO.write(bin, "JPEG", fout);fout.close();}
web实现验证码
页面的img的src请求servlet生成验证码图片
servlet需要把验证码保存到session中用于登录判断输入的验证码是否正确
比较session域中的验证码和用户输入的验证码,如果相同则登录成功
login.jsp
<h1>用户登录表单</h1>
<c:if test="${not empty requestScope.message}"><h3>${requestScope.message}</h3>
</c:if>
<form method="get" action="<c:url value='/user/login'/>"><table><tr><th>用户名称:</th><td><input type="text" name="uname"/></td></tr><tr><th>用户密码:</th><td><input type="password" name="upwd"/></td></tr><tr><th><img src="<c:url value='/user/yzm'/>" id="img_yzm"/></th><td><input type="text" name="uyzm"/></td></tr><tr><th colspan="2"><INPUT type="reset" value="重置"/> <INPUT type="submit" value="登录"/></th></tr></table>
</form><!-- 添加js事件 点击图片 图片更新 -->
<script type="text/javascript">//文档加载完毕 给img_yzm注册点击事件window.onload=function(){//获取img_yzmvar oimg=document.getElementById("img_yzm");oimg.onclick=function(){//请求时 为了不使用缓存 添加一个无用的参数 参数值每次不同即可this.src="<c:url value='/user/yzm?n='/>"+Math.random();}}
</script>
servlet:生成验证码
String message="3456789abcdefghjkmnpqstuvwxy";
//1 在内存中开辟空间 用于画画
BufferedImage bin=new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);
//2 获取画笔
Graphics2D g=(Graphics2D)bin.getGraphics();
//3 涂染料 画背景
g.setColor(Color.WHITE);
//4 画背景:长方形
g.fillRect(2, 2, 195, 45);
//5 画主题
//随机四五个字符
String str="";
for (int i = 0; i <4; i++) {str+=message.charAt((int)(Math.random()*message.length()));
}
//给字符设置文字样式
Font font=new Font(null, Font.BOLD, 34);
g.setFont(font);
//把字符串中的所有字符画到画布上
for (int i = 0; i < str.length(); i++) {//笔蘸墨g.setColor(new Color((int)(Math.random()*100+120), (int)(Math.random()*100+120), (int)(Math.random()*100+120)));//写字g.drawString(str.charAt(i)+"", i*45+10, 40);
}
//画干扰线
for (int i = 0; i < (int)(Math.random()*5+5); i++) {g.setColor(new Color((int)(Math.random()*50+120), (int)(Math.random()*50+120), (int)(Math.random()*50+120)));g.drawLine(2, (int)(Math.random()*43+2), 195, (int)(Math.random()*43+2));
}
//把验证码的信息装入session
request.getSession().setAttribute("yzm", str);
//把内存中图片的信息通过response的输出流 响应给客户端
ImageIO.write(bin, "JPEG", response.getOutputStream());
servlet:判断登录
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取请求参数
String uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");
String uyzm=request.getParameter("uyzm");
String message="";
//判断参数的正确
if(!uname.equals("韩梅梅")){message="用户名错误!";
}else if(!upwd.equals("123")){message="用户密码错误!";
}else {String yzm=request.getSession().getAttribute("yzm")+"";if(!uyzm.equals(yzm)){message="验证码错误!";}
}
//如果message有值 登录失败 回到登录页面
if(!message.isEmpty()){request.setAttribute("message", message);request.getRequestDispatcher("/login.jsp").forward(request, response);return;
}
response.getWriter().print("<font color='red'>"+uname+"登录成功!</font>");
javaWeb实现图片验证码功能相关推荐
- 用Java实现图片验证码功能
一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 1.图片生成实体类: 1 package com.hexianwei.graphic; 2 3 i ...
- canvas——实现图片验证码(功能实现)
canvas实现图片验证码--效果图如下: 1.html部分代码 <div class="wrapper"><div class="inputBox&q ...
- drf实现图片验证码功能
一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...
- 后台图片验证码功能是什么实现的
一.导包,1)check_code.py文件:2)Monaco.ttf字体: 二.通过session机制,来实现此功能,部分代码如下: 1 f = BytesIO() 2 img, code = cr ...
- JavaWeb实现登录验证码功能
先在Web目录下的lib目录中导入jar包:ValidateCode.jar 然后创建一个Servlet类来创建验证码:ValidateCodeServlet.java 创建验证码 将验证码存储到se ...
- 登录功能图片验证码的实现
首先从网上下载一个生成验证码的Servlet: package com.train.controller;import java.awt.Color; import java.awt.Font; im ...
- Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)
在此首先感谢**编程不良人**up主提供的视频教程 代码都是跟着up的视频敲的,遇到的一些问题也是通过CSDN博主提供的教程解决的,在此也感谢那些提供bug解决方案的前辈们~ 项目完整代码已经发布到g ...
- 点击图片验证码更换验证码图片
做登录注册等功能的时候一般都有图片验证码功能,点击看不清,换一张的时候更换一张验证码,但是又不想整个页面跟着刷新,只刷新一个验证码,因为我的项目是react项目,所以就直接上react的代码了,原理就 ...
- javaweb实现验证码功能
在javaweb的用户注册与登陆功能时,有时为了防止漏洞或者大量注册,可以使用验证码功能,下面是验证码的一个简单实现 验证码类 public class ValiImg extends HttpSer ...
最新文章
- 一图看懂国外智能网联汽车传感器产业发展!
- 3D游戏编程入门(十五)索引缓存
- JavaEE Tutorials (24) - 资源适配器示例
- 你认识它们吗?2014十大科技流行词
- Linux基础知识(2)
- step1 . day8 C语言基础练习之指针和函数
- Linux常用命令(第二版) --系统开关机命令
- 函数局部有界性定理_数学分析第四章《函数连续性》备考指南
- Qt之tcp的简单使用
- win10家庭版 mysql_win10家庭版64位下mysql 8.0.15 安装配置方法图文教程
- spring纯注解+libreoffice
- Java Annotation 刷课笔记(二)
- Coil:为Kotlin而生的图片加载框架
- Revit二次开发--为管道添加标注
- OpenStack Cinder特性之Volume-backed image介绍与验证
- 焊接机器人编程c语言,机器人现场编程与调试(cnc上下料,弧焊,喷涂,点焊等),就是这么全!...
- SpinalNet: Deep Neural Network with Gradual Input
- 【毕业设计】电商产品评论数据分析可视化(情感分析) - python 大数据
- carplay_如何更改您的CarPlay壁纸
- MySQL 内连接、外连接、全连接