使用:

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登录验证码的实现相关推荐

  1. javaWeb登录验证码第一次验证失败,刷新验证码后验证成功问题

    个人认为问题原因:经过debug发现,第一次获取验证码保存验证码的session和用户登录接口的session不是同一个session,造成这样的原因可能是,浏览器的速度太快了(- ̄▽ ̄)- ,在登录 ...

  2. JavaWeb登录注册系统/界面(邮箱验证码,数据库连接,详细注释,可作结课作业,可用于学习,可接入其他主系统)

    目录 1.前言 2.系统实机演示 3.系统分析与设计 (1)主要软件与工具 (2)系统分析 (3)系统规划 4.系统设计与构建 (1)JavaWeb创建 (2)JavaWeb运行 (3)先期依赖准备: ...

  3. java输入验证码代码,JavaWeb 实现验证码功能(demo)

    验证码不用多说,在 WEB-APP 中一般应用于:登录.注册.买某票.秒杀等场景.大家都接触过~可以说是千奇百怪,各式各样. DEMO 目标功能 验证码页面输入. 页面更换验证码(异步实现). 后台验 ...

  4. Python - WebDriver 识别登录验证码

    Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...

  5. SpringBoot 实现登录验证码(附集成SpringSecurity)

    SpringBoot 实现登录验证码 1. 生成验证码的工具类 2. 验证码测试接口 3. 验证码过滤器 4. Spring Security配置类引入验证码过滤器 5. 效果图 1. 生成验证码的工 ...

  6. php实现登录验证码_PHP实现登录验证码功能

    本篇文章主要介绍PHP如何编写登录验证码的功能,感兴趣的朋友参考下,希望对大家有所帮助. 在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能.session_star ...

  7. 通过Cookie跳过登录验证码【限cookie不失效有用】

    验证码,相信每个写web自动化测试的同学来说,都是个头疼的事,怎么办呢? 方法还是有的,先说今天这种方式,通过cookie绕过登录验证码 思路: 需要你通过抓包工具抓到你登录的cookie 接下来开始 ...

  8. 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)

    文章标题 一.Bs4搜索文档树 二.CSS选择器 三.selenium基本使用 四.无界面浏览器 五.selenium其他使用 1)自动登录百度案例 2)获取位置属性大小.文本 3)自动获取12306 ...

  9. java 登录验证码_java实现登录验证码

    本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...

最新文章

  1. 在浏览器中输入URL按下回车键后发生了什么
  2. mongodb小结(转)
  3. 这么简单的bug,你改了2天?
  4. Hive简单实际操作(二)
  5. iptables必知必会用法
  6. C语言枚举类型(enum)的各种用法
  7. 读RESTful API 设计指南心得体会
  8. 152.乘积最大子序列
  9. ipad显示连接不到商店服务器,iPad无法连接App Store 打不开怎么办
  10. OpenGL中各种坐标系的理解
  11. linux 定时任务(crontab)
  12. 心情是一盏温茶的宁静
  13. 十二星座的心是什么做的
  14. GD32 CANFD仲裁区500K,数据区2M 测试
  15. 《使命召唤》单机版详尽攻略
  16. 2018-12-12
  17. 秒杀设计 mysql_秒杀项目-数据库表设计
  18. 推卸责任的 Chain of Responsibility模式
  19. 左连接中onnbsp;后面的条件与wher…
  20. java SM9密钥转成String型

热门文章

  1. 51单片机-LED模块-来回流水灯
  2. houdini 体素 volume vox
  3. 【转载】没有urllib2怎么办?安装不了urllib2怎么办?
  4. python 获取屏幕颜色_Python3 获取手机屏幕指定坐标点的 RGBA 和 16 进制颜色
  5. 【ICLR 2023】RankCSE:基于排序学习的无监督句子表示学习
  6. C++ vector函数
  7. python常见算法(chatgpt算法实现)
  8. vba 之判断工作表是否处于保护状态:Worksheets.ProtectContents
  9. 2022年起重机司机(限门式起重机)考试题库及在线模拟考试
  10. 在linux中关闭防火墙