第一种

  第一步:  JSP

    <li><input name="validCode"  id="validCode" type="text" class="loginvalid" value="" onclick="JavaScript:this.value=''"/><img src="${path}/patchca.htm"  id = "patchca" style="display:inline-block; float:right;width:100px; height:48px;line-height:48px;margin-right:100px;padding:0;"></li>

  第二步: 后台

    @RequestMapping("/patchca.htm")
    public void patchca(HttpServletResponse response,HttpSession session) throws IOException
    {
      CaptchaService cs = new CaptchaService();
      response.setContentType("image/png");
      response.setHeader("cache", "no-cache");
      OutputStream os = response.getOutputStream();
      String patchca = EncoderHelper.getChallangeAndWriteImage(cs, "png", os);
      session.setAttribute("PATCHCA", patchca);
      os.flush();
      os.close();
      cs = null;
    }

第二种

  

Controller:生成验证码

  1. @RequestMapping("/user/check.jpg")
  2. public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
  3. // 通知浏览器不要缓存
  4. response.setHeader("Expires", "-1");
  5. response.setHeader("Cache-Control", "no-cache");
  6. response.setHeader("Pragma", "-1");
  7. CaptchaUtil util = CaptchaUtil.Instance();
  8. // 将验证码输入到session中,用来验证
  9. String code = util.getString();
  10. request.getSession().setAttribute(“code”, code);
  11. // 输出打web页面
  12. ImageIO.write(util.getImage(), "jpg", response.getOutputStream());
  13. }

jsp:显示验证码

  1. <img id="img" src="<%=basePath%>user/check.jpg" onclick="refresh()">
  1. function refresh() {
  2. var url = $("#basePath").val() + "user/check.jpg?number="+Math.random();
  3. $("#img").attr("src",url);
  4. }

验证:

获取session中的code与前台传回的code是否一致

  1. /**
  2. * 验证码验证
  3. *
  4. * @param session
  5. * @param code
  6. */
  7. private void checkCode(HttpSession session, String code) {
  8. String codeSession = (String) session.getAttribute(“code”);
  9. if (StringUtils.isEmpty(codeSession)) {
  10. log.error("没有生成验证码信息");
  11. throw new IllegalStateException("ERR-01000");
  12. }
  13. if (StringUtils.isEmpty(code)) {
  14. log.error("未填写验证码信息");
  15. throw new BussinessException("ERR-06018");
  16. }
  17. if (codeSession.equalsIgnoreCase(code)) {
  18. // 验证码通过
  19. } else {
  20. log.error("验证码错误");
  21. throw new BussinessException("ERR-06019");
  22. }
  23. }

工具类:

  1. import java.awt.Color;
  2. import java.awt.Font;
  3. import java.awt.Graphics;
  4. import java.awt.image.BufferedImage;
  5. import java.util.Random;
  6. /**
  7. * 验证码生成工具
  8. * @author HXL
  9. *
  10. */
  11. public class CaptchaUtil {
  12. private BufferedImage image;// 图像
  13. private String str;// 验证码
  14. private static char code[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();
  15. public static final String SESSION_CODE_NAME="code";
  16. private CaptchaUtil() {
  17. init();// 初始化属性
  18. }
  19. /*
  20. * 取得RandomNumUtil实例
  21. */
  22. public static CaptchaUtil Instance() {
  23. return new CaptchaUtil();
  24. }
  25. /*
  26. * 取得验证码图片
  27. */
  28. public BufferedImage getImage() {
  29. return this.image;
  30. }
  31. /*
  32. * 取得图片的验证码
  33. */
  34. public String getString() {
  35. return this.str;
  36. }
  37. private void init() {
  38. // 在内存中创建图象
  39. int width = 85, height = 20;
  40. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  41. // 获取图形上下文
  42. Graphics g = image.getGraphics();
  43. // 生成随机类
  44. Random random = new Random();
  45. // 设定背景色
  46. g.setColor(getRandColor(200, 250));
  47. g.fillRect(0, 0, width, height);
  48. // 设定字体
  49. g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
  50. // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
  51. g.setColor(getRandColor(160, 200));
  52. for (int i = 0; i < 155; i++) {
  53. int x = random.nextInt(width);
  54. int y = random.nextInt(height);
  55. int xl = random.nextInt(12);
  56. int yl = random.nextInt(12);
  57. g.drawLine(x, y, x + xl, y + yl);
  58. }
  59. // 取随机产生的认证码(4位数字)
  60. String sRand = "";
  61. for (int i = 0; i < 4; i++) {
  62. String rand = String.valueOf(code[random.nextInt(code.length)]);
  63. sRand += rand;
  64. // 将认证码显示到图象中
  65. g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
  66. // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
  67. g.drawString(rand, 13 * i + 6, 16);
  68. }
  69. // 赋值验证码
  70. this.str = sRand;
  71. // 图象生效
  72. g.dispose();
  73. // ByteArrayInputStream input = null;
  74. // ByteArrayOutputStream output = new ByteArrayOutputStream();
  75. // try {
  76. // ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);
  77. // ImageIO.write(image, "JPEG", imageOut);
  78. // imageOut.close();
  79. // input = new ByteArrayInputStream(output.toByteArray());
  80. // } catch (Exception e) {
  81. // System.out.println("验证码图片产生出现错误:" + e.toString());
  82. // }
  83. // this.image = input
  84. this.image = image;/* 赋值图像 */
  85. }
  86. /*
  87. * 给定范围获得随机颜色
  88. */
  89. private Color getRandColor(int fc, int bc) {
  90. Random random = new Random();
  91. if (fc > 255)
  92. fc = 255;
  93. if (bc > 255)
  94. bc = 255;
  95. int r = fc + random.nextInt(bc - fc);
  96. int g = fc + random.nextInt(bc - fc);
  97. int b = fc + random.nextInt(bc - fc);
  98. return new Color(r, g, b);
  99. }
  100. }

最后展示:

javaweb登录验证码的实现的更多相关文章

  1. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  2. Java实现登录验证码

    登录验证码 Servlet /* 从请求中获取数据,获取验证码的session的值转为String类型,       销毁,防止返回后验证码不刷新,重新验证成功       判断验证码是否相同(忽略大 ...

  3. selemiun 自动化测试登录验证码处理

    selemiun 自动化测试登录验证码处理 一.软件及插件的安装 1.火狐浏览器版本(55.0(x64 zh-CN):https://www.cnblogs.com/sandysun/p/783811 ...

  4. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

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

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

  6. 登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

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

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

  8. 基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示

    headers: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},data:$(". ...

  9. 15.Python实现识别登录验证码(入门)

    1.若想识别登录验证码,需要安装:Tesseract-OCR,其下载地址为:http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tess ...

随机推荐

  1. ffmpeg+nginx-rtmp-module

    原址: https://www.cnblogs.com/cnsanshao/p/6370938.html另外: vlc播放器能播放rtsp协议 nginx安装和配置 模块下载 https://gith ...

  2. JVM调优(四)——tomcat远程debug

    JVM调优(四)--tomcat远程debug tomcat远程debug jdwp协议 使用步骤 登录远程服务器,进入tomcat目录,并打开文件: //tomcat/bin/startup.sh ...

  3. The SDK directory '/home/wangju/gitProject/Automation/D:\Android_SDK' does not exist.

    执行gradle clean命令报错 gradle clean FAILURE: Build failed with an exception. * What went wrong: A proble ...

  4. 用 Flask 来写个轻博客 (30) — 使用 Flask-Admin 增强文章管理功能

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 实现文章管理功能 实现效果 前文列表 用 Flask 来写个 ...

  5. zabbix部署agent

    1.下载zabbix源 rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarc ...

  6. cita 源码研究

    适用环境 vim + YouCompleteMe 使用 github 源,不能使用 ustc 源 git clone --depth 1 --recusive https://github.com/k ...

  7. JQuery实现页面跳转

    $(function(){ var pn = $("#gotopagenum").val();       //#gotopagenum是文本框的id属性 location.hre ...

  8. Java并发AtomicIntegerArray类

    java.util.concurrent.atomic.AtomicIntegerArray类提供了可以以原子方式读取和写入的底层int数组的操作,还包含高级原子操作. AtomicIntegerAr ...

  9. input只读效果

    有两种方式可以实现input的只读效果:disabled 和 readonly. 自然两种出来的效果都是只能读取不能编辑,可是两者有很大不同. Disabled说明该input无效,及其value不会 ...

  10. easyUI学习笔记一

    1.引用js文件 <script type="text/javascript" src = jquery-easyui/jquery.min.js> </scri ...