javaweb登录验证码的实现
使用:
Controller:生成验证码
@RequestMapping("/user/check.jpg")public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException {// 通知浏览器不要缓存response.setHeader("Expires", "-1");response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "-1");CaptchaUtil util = CaptchaUtil.Instance();// 将验证码输入到session中,用来验证String code = util.getString();request.getSession().setAttribute(“code”, code);// 输出打web页面ImageIO.write(util.getImage(), "jpg", response.getOutputStream());}
jsp:显示验证码
<img id="img" src="<%=basePath%>user/check.jpg" οnclick="refresh()">
function refresh() {var url = $("#basePath").val() + "user/check.jpg?number="+Math.random();$("#img").attr("src",url);
}
验证:
获取session中的code与前台传回的code是否一致
/*** 验证码验证* * @param session* @param code*/private void checkCode(HttpSession session, String code) {String codeSession = (String) session.getAttribute(“code”);if (StringUtils.isEmpty(codeSession)) {log.error("没有生成验证码信息");throw new IllegalStateException("ERR-01000");}if (StringUtils.isEmpty(code)) {log.error("未填写验证码信息");throw new BussinessException("ERR-06018");}if (codeSession.equalsIgnoreCase(code)) {// 验证码通过} else {log.error("验证码错误");throw new BussinessException("ERR-06019");}}
工具类:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
/*** 验证码生成工具* @author HXL**/
public class CaptchaUtil {private BufferedImage image;// 图像private String str;// 验证码private static char code[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();public static final String SESSION_CODE_NAME="code";private CaptchaUtil() {init();// 初始化属性}/** 取得RandomNumUtil实例*/public static CaptchaUtil Instance() {return new CaptchaUtil();}/** 取得验证码图片*/public BufferedImage getImage() {return this.image;}/** 取得图片的验证码*/public String getString() {return this.str;}private void init() {// 在内存中创建图象int width = 85, height = 20;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取图形上下文Graphics g = image.getGraphics();// 生成随机类Random random = new Random();// 设定背景色g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);// 设定字体g.setFont(new Font("Times New Roman", Font.PLAIN, 18));// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产生的认证码(4位数字)String sRand = "";for (int i = 0; i < 4; i++) {String rand = String.valueOf(code[random.nextInt(code.length)]);sRand += rand;// 将认证码显示到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成g.drawString(rand, 13 * i + 6, 16);}// 赋值验证码this.str = sRand;// 图象生效g.dispose();// ByteArrayInputStream input = null;// ByteArrayOutputStream output = new ByteArrayOutputStream();// try {// ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);// ImageIO.write(image, "JPEG", imageOut);// imageOut.close();// input = new ByteArrayInputStream(output.toByteArray());// } catch (Exception e) {// System.out.println("验证码图片产生出现错误:" + e.toString());// }// this.image = inputthis.image = image;/* 赋值图像 */}/** 给定范围获得随机颜色*/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);}
}
最后说明一点: 登录拦截器必须要放行生成验证码路径! 登录拦截器必须要放行生成验证码路径!! 登录拦截器必须要放行生成验证码路径!!!重要的事情说三遍~~
最后展示:
不算很丑~~~
javaweb登录验证码的实现相关推荐
- javaWeb登录验证码第一次验证失败,刷新验证码后验证成功问题
个人认为问题原因:经过debug发现,第一次获取验证码保存验证码的session和用户登录接口的session不是同一个session,造成这样的原因可能是,浏览器的速度太快了(- ̄▽ ̄)- ,在登录 ...
- JavaWeb登录注册系统/界面(邮箱验证码,数据库连接,详细注释,可作结课作业,可用于学习,可接入其他主系统)
目录 1.前言 2.系统实机演示 3.系统分析与设计 (1)主要软件与工具 (2)系统分析 (3)系统规划 4.系统设计与构建 (1)JavaWeb创建 (2)JavaWeb运行 (3)先期依赖准备: ...
- java输入验证码代码,JavaWeb 实现验证码功能(demo)
验证码不用多说,在 WEB-APP 中一般应用于:登录.注册.买某票.秒杀等场景.大家都接触过~可以说是千奇百怪,各式各样. DEMO 目标功能 验证码页面输入. 页面更换验证码(异步实现). 后台验 ...
- Python - WebDriver 识别登录验证码
Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...
- SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码 1. 生成验证码的工具类 2. 验证码测试接口 3. 验证码过滤器 4. Spring Security配置类引入验证码过滤器 5. 效果图 1. 生成验证码的工 ...
- php实现登录验证码_PHP实现登录验证码功能
本篇文章主要介绍PHP如何编写登录验证码的功能,感兴趣的朋友参考下,希望对大家有所帮助. 在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能.session_star ...
- 通过Cookie跳过登录验证码【限cookie不失效有用】
验证码,相信每个写web自动化测试的同学来说,都是个头疼的事,怎么办呢? 方法还是有的,先说今天这种方式,通过cookie绕过登录验证码 思路: 需要你通过抓包工具抓到你登录的cookie 接下来开始 ...
- 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)
文章标题 一.Bs4搜索文档树 二.CSS选择器 三.selenium基本使用 四.无界面浏览器 五.selenium其他使用 1)自动登录百度案例 2)获取位置属性大小.文本 3)自动获取12306 ...
- java 登录验证码_java实现登录验证码
本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...
最新文章
- 在浏览器中输入URL按下回车键后发生了什么
- mongodb小结(转)
- 这么简单的bug,你改了2天?
- Hive简单实际操作(二)
- iptables必知必会用法
- C语言枚举类型(enum)的各种用法
- 读RESTful API 设计指南心得体会
- 152.乘积最大子序列
- ipad显示连接不到商店服务器,iPad无法连接App Store 打不开怎么办
- OpenGL中各种坐标系的理解
- linux 定时任务(crontab)
- 心情是一盏温茶的宁静
- 十二星座的心是什么做的
- GD32 CANFD仲裁区500K,数据区2M 测试
- 《使命召唤》单机版详尽攻略
- 2018-12-12
- 秒杀设计 mysql_秒杀项目-数据库表设计
- 推卸责任的 Chain of Responsibility模式
- 左连接中onnbsp;后面的条件与wher…
- java SM9密钥转成String型
热门文章
- 51单片机-LED模块-来回流水灯
- houdini 体素 volume vox
- 【转载】没有urllib2怎么办?安装不了urllib2怎么办?
- python 获取屏幕颜色_Python3 获取手机屏幕指定坐标点的 RGBA 和 16 进制颜色
- 【ICLR 2023】RankCSE:基于排序学习的无监督句子表示学习
- C++ vector函数
- python常见算法(chatgpt算法实现)
- vba 之判断工作表是否处于保护状态:Worksheets.ProtectContents
- 2022年起重机司机(限门式起重机)考试题库及在线模拟考试
- 在linux中关闭防火墙