javaweb中验证码验证实现
验证码资料:https://pan.baidu.com/s/1tMCtnyy9f1t1ld5feyooDQ
1.注册表页面register.jsp
<script type="text/javascript">
function changeImg(obj){
//?time="+new Date().getTime(); 保证每次提交的参数不同以实现点击图片时切换图片
obj.src="/WEB16_Session_Cookie/checkImgServlet?time="+new Date().getTime();
}
</script>
<form action="register" method="post">
<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" name="yanzhengma">
</div>
<div class="col-sm-2">
<img οnclick="changeImg(this)" src="${pageContext.request.contextPath }/checkImgServlet">
<span><font color="red">${yzminfo }</font></span>
</div>
</div>
<div class="form-group">
<input type="submit" width="100" value="注册" name="submit"
</div>
</form>
2.checkImgServlet
package com.wenhao.web.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 验证码生成程序
*
*
*
*/
public class CheckImgServlet extends HttpServlet {
// 集合中保存所有成语
private List<String> words = new ArrayList<String>();
@Override
public void init() throws ServletException {
// 初始化阶段,读取new_words.txt
// web工程中读取 文件,必须使用绝对磁盘路径
String path = getServletContext().getRealPath("/WEB-INF/new_words.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
String line;
while ((line = reader.readLine()) != null) {
words.add(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 禁止缓存
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
// response.setDateHeader("Expires", -1);
int width = 120;
int height = 30;
// 步骤一 绘制一张内存中图片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 步骤二 图片绘制背景颜色 ---通过绘图对象
Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
// 绘制任何图形之前 都必须指定一个颜色
graphics.setColor(getRandColor(200, 250));
graphics.fillRect(0, 0, width, height);
// 步骤三 绘制边框
graphics.setColor(Color.WHITE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 步骤四 四个随机数字
Graphics2D graphics2d = (Graphics2D) graphics;
// 设置输出字体
graphics2d.setFont(new Font("宋体", Font.BOLD, 18));
Random random = new Random();// 生成随机数
int index = random.nextInt(words.size());
String word = words.get(index);// 获得成语
// 定义x坐标
int x = 10;
for (int i = 0; i < word.length(); i++) {
// 随机颜色
graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
// 旋转 -30 --- 30度
int jiaodu = random.nextInt(60) - 30;
// 换算弧度
double theta = jiaodu * Math.PI / 180;
// 获得字母数字
char c = word.charAt(i);
// 将c 输出到图片
graphics2d.rotate(theta, x, 20);
graphics2d.drawString(String.valueOf(c), x, 20);
graphics2d.rotate(-theta, x, 20);
x += 30;
}
// 将验证码内容保存session
request.getSession().setAttribute("checkcode_session", word);
// 步骤五 绘制干扰线
graphics.setColor(getRandColor(160, 200));
int x1;
int x2;
int y1;
int y2;
for (int i = 0; i < 30; i++) {
x1 = random.nextInt(width);
x2 = random.nextInt(12);
y1 = random.nextInt(height);
y2 = random.nextInt(12);
graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
}
// 将上面图片输出到浏览器 ImageIO
graphics.dispose();// 释放资源
//将图片写到response.getOutputStream()中
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* 取其某一范围的color
*
* @param fc
* int 范围参数1
* @param bc
* int 范围参数2
* @return Color
*/
private Color getRandColor(int fc, int bc) {
// 取其随机颜色
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
3.RegisterServlet
//验证码验证
String yzm = request.getParameter("yanzhengma");
Object randomyzm = session.getAttribute("checkcode_session");
if(!yzm.equals(randomyzm)) {
//存域
request.setAttribute("yzminfo", "验证码不正确");
//转发
request.getRequestDispatcher("register.jsp").forward(request, response);
return ; //服务器内部转发后当前页代码会继续执行
}
javaweb中验证码验证实现相关推荐
- JavaWeb中验证码的实现
在Web程序中,验证码是经常使用的技术之一.Web程序永远面临未知用户和未知程序的探测.为了防止恶意脚本的执行,验证码技术无疑是首选方案之一.本文将讨论如何在JSP和Servlet中使用验证码技术. ...
- java验证码技术_验证码技术(JavaWeb 中验证码的实现 )
二.实践 下面通过程序演示验证码产生和实现验证的过程. 1.验证码的产生 创建一个Servlet完成验证码的产生.首先通过随机数的产生类Random随机产生一个4位的验证码, 并将其存入session ...
- 如何在网站中添加验证码验证
要在网站中添加验证码验证,可以按照以下步骤进行操作: 在HTML表单中添加验证码输入框.在表单中添加一个输入框,用于让用户输入验证码. 生成随机验证码并保存到会话中.在服务器端生成一个随机的验证码,并 ...
- java输入验证码代码,JavaWeb 实现验证码功能(demo)
验证码不用多说,在 WEB-APP 中一般应用于:登录.注册.买某票.秒杀等场景.大家都接触过~可以说是千奇百怪,各式各样. DEMO 目标功能 验证码页面输入. 页面更换验证码(异步实现). 后台验 ...
- php字段验证规则,详解ThinkPHP中自动验证及验证规则
本篇文章详细介绍了thinkphp中自动验证及验证规则的方法,希望对学习thinkphp的朋友有帮助! 详解ThinkPHP中自动验证及验证规则 ThinkPHP 内置了数据对象的自动验证功能来完成模 ...
- Javaweb中上传图片,获取相对路径,绝对路径
标题:Javaweb中上传图片,获取相对路径,绝对路径 实际上获取的是绝对路径,不过通过浏览器查看到的不会是绝对路径,而是被浏览器保护好,给你看到的一个假的路径,而我们要做的就是获取图片的名字即可,人 ...
- php 怎么验证邮箱验证码,PHP实现邮箱验证码验证功能
标签:邮箱验证 登录 格式 tar 程序 body 用户名 实现 include *文章来源:https://blog.egsec.cn/archives/623 ( ...
- javaweb登录验证码的实现
使用: Controller:生成验证码 @RequestMapping("/user/check.jpg")public void createCode(HttpServletR ...
- 使用OCR来解决自动化中图片验证
序言 由于在自动化测试过程中有的登录需要图形验证码,不管是webUI自动化测试,还是接口自动化测试如果登录接口返回的是一张图片出现这种情况我们则一般难以全自动化的去解决. 在传统方法中可能很多测试同学 ...
最新文章
- SAP MM初阶事务代码MEK1维护PB00价格
- opencv2生成图像的梯度图
- 人脸识别技术大总结—Face Detection Alignment
- argument--学习笔记
- 图片服务 - thumbor过滤器
- java harris corner_Harris Corner Detection
- Python爬虫进阶七之设置ADSL拨号服务器代理
- 最小生成树详解(模板 + 例题)
- 基于php的酒店管理系统答辩ppt,基于PHP的连锁酒店管理系统毕业设计论文+任务书+开题报告+中期报告+答辩PPT+项目源码及数据库...
- My interest is the rules/ways to implement, go and insist with interest!!!
- 方舟手游修改服务器难度,方舟手游中途可以修改难度吗
- mysql远程主机强迫关闭了_channal经常关闭
- PowerPoint PPT 模板插入可修改的文本框
- 我用nodejs给朋友发了一份邮件
- CentOS无人值守安装
- vb.net 教程 4-11 Json文件操作 1
- 【SQL】之存储过程与函数
- 我要双休,单休等于没有休
- 2018年适合做什么网站?分享几种比较好的网站
- ASM(五) 利用TreeApi 解析生成及转换Class
热门文章
- Linux中文件权限、所有者、所属组修改
- 计算机系统导论自考,天津2012年自考“计算机系统导论”课程考试大纲.doc
- org module之org-eww
- 水利RTU 水文监测系统的利器
- 使用Maya2018快速制作气球的简单漂浮动力学
- LeetCode4_编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ““。(解决方案:横向扫描、 纵向扫描 、分治 二分查找 、秀儿操作之排序比较头尾)
- 编码器设计——Verilog HDL语言
- 特征值和特征向量意义
- 20年IT老兵分享:账务系统设计及应用
- JavaWeb期末大作业——图书管理系统