首先java代码生成验证码:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;@Controller
@RequestMapping("/backend/code")
public class CodeController {@RequestMapping("/image")public void image(HttpServletRequest request, HttpServletResponse response) throws IOException {request.setCharacterEncoding("utf-8");BufferedImage bfi = new BufferedImage(80, 25, BufferedImage.TYPE_INT_RGB);Graphics g = bfi.getGraphics();g.fillRect(0, 0, 80, 25);//验证码字符范围char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();Random r = new Random();int index;StringBuffer sb = new StringBuffer(); //保存字符串for (int i = 0; i < 4; i++) {index = r.nextInt(ch.length);g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));Font font = new Font("宋体", 30, 20);g.setFont(font);g.drawString(ch[index] + "", (i * 20) + 2, 23);sb.append(ch[index]);}// 添加噪点int area = (int) (0.02 * 60 * 25);for (int i = 0; i < area; ++i) {int x = (int) (Math.random() * 80);int y = (int) (Math.random() * 25);bfi.setRGB(x, y, (int) (Math.random() * 255));}//设置验证码中的干扰线for (int i = 0; i < 3; i++) {//随机获取干扰线的起点和终点int xstart = (int) (Math.random() * 80);int ystart = (int) (Math.random() * 25);int xend = (int) (Math.random() * 80);int yend = (int) (Math.random() * 25);g.setColor(interLine(1, 255));g.drawLine(xstart, ystart, xend, yend);}HttpSession session = request.getSession();  //保存到sessionsession.setAttribute("verificationCode", sb.toString());ImageIO.write(bfi, "JPG", response.getOutputStream());  //写到输出流}private static Color interLine(int Low, int High) {if (Low > 255)Low = 255;if (High > 255)High = 255;if (Low < 0)Low = 0;if (High < 0)High = 0;int interval = High - Low;int r = Low + (int) (Math.random() * interval);int g = Low + (int) (Math.random() * interval);int b = Low + (int) (Math.random() * interval);return new Color(r, g, b);}}

前台验证码写法:

<div class="col-sm-2">
<!-- 验证码 --><img class="img-rounded" src="${pageContext.request.contextPath}/backend/code/image" id="randCode" style="height: 32px; width: 70px;"/>
</div><div class="col-sm-2"><button type="button" class="btn btn-link" onclick="reloadImage()">看不清</button>
</div>

刷新验证码的js写法:

     //重新加载验证码function reloadImage(){$('#randCode').attr('src','${pageContext.request.contextPath}/backend/code/image?time='+new Date().getTime());$('#code').val('');}$(function(){$('#frmLogin').bootstrapValidator({feedbackIcons: {valid: 'glyphicon glyphicon-ok',invalid: 'glyphicon glyphicon-remove',validating: 'glyphicon glyphicon-refresh'},fields:{loginName:{validators:{notEmpty:{message:'用户名不能为空'}}},password:{validators:{notEmpty:{message:'密码不能为空'}}},code:{validators:{notEmpty:{message:'请输入验证码'},remote:{url:'${pageContext.request.contextPath}/backend/code/checkCode',message:'验证码不正确'}}}}});

验证码后台校验的话,就是去session获取报错的验证码进行校验。

  @RequestMapping("/checkCode")@ResponseBodypublic Map<String,Object> checkCode(String code,HttpSession session){Map<String,Object> map=new HashMap<>();String verificationCode = (String) session.getAttribute("verificationCode");if(verificationCode.equalsIgnoreCase(code)){map.put("valid",true);}else{map.put("valid",false);}return map;}

java验证码的实现相关推荐

  1. java 验证码透明背景_Java中的证书透明度验证

    java 验证码透明背景 因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易. 牺牲了整个周末的一半时间,我可以证明这并不是一件小事. 但 ...

  2. java 验证码生成和验证

    1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...

  3. java 验证码_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

  4. java 验证码旋转,java实现动态验证码

    java动态实现验证码,供大家参考,具体内容如下 [实现效果] 点击图片或者文字可以更换验证码 验证码随机生成,由大小写字母和数字组成 验证码字体颜色随机生成,字母角度有偏转 干扰线随机分布 在这里插 ...

  5. Java验证码jar包ValidateCode.jar的使用(附百度网盘下载)

    Java验证码jar包ValidateCode.jar的使用(附百度网盘下载地址) 在项目中我们会经常用写图片验证码这个功能.但是自己去封装也挺繁琐的,这里提供给各位小伙伴一个很好用的生成图片验证码的 ...

  6. java验证码识别库

    java验证码识别库 使用J4L识别验证码 使用 Tess4J 进行 OCR 识别 使用J4L识别验证码 将解压文件下bits64目录的三个文件 liblept168.dll tess3Wrapper ...

  7. java验证码效果,和图片缩略效果

    java验证码效果,和图片缩略效果 效果图:验证码 效果图:缩略 这两个效果我做在了一个类里面,可以进行调用,直接上代码 注:要是复制粘贴此代码,需要更改自己所使用的字体,也可以用我这个字体,记得更改 ...

  8. java验证码源码_Java通用验证码程序及应用示例(提供源码下载)

    评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美!  回复  更多评论 # re ...

  9. java 验证码图片识别_JavaSE图像验证码简单识别程序详解

    本文为大家分享了JavaSE图像验证码简单识别程序,供大家参考,具体内容如下 首先你应该对图片进行样本采集,然后将样本进行灰度处理,也就是变成黑白两色. 然后你就可以使用该类,对目标文件进行分析.具体 ...

  10. java验证码实现简单_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

最新文章

  1. BurpSuite的使用总结
  2. legacy bios与uefi两种模式安装windows8操作系统的方法
  3. xp电脑自动锁定计算机,WindowsXP系统组策略的锁死的解决方法
  4. python二叉树的创建与遍历
  5. AsyncEx - async/await 的辅助库
  6. [转载]数据层的多租户浅谈(SAAS多租户数据库设计)
  7. android trace获取和分析
  8. Java静态代理和动态代理(代理模式)详解
  9. 【VBA】Word批量改变图片的大小,进行排版
  10. #10098. 「一本通 3.6 例 1」分离的路径
  11. python中根据视频帧生成视频,保存为mp4格式
  12. 贴出最新整理的英语谚语大全(3267条)
  13. jpg怎么转换成pdf文档
  14. *p++ 和 *++p
  15. 2004年秋浙江省计算机等级考试二级C 编程题(2)
  16. 数据结构--图的存储结构
  17. SAP-MM MM STO订单详解1(工厂间的转储一步法和两步法)
  18. 2020顶尖黑帽seo优化教程
  19. @PostMapping
  20. 120年过去,历史不该忘记

热门文章

  1. Java高并发之锁优化
  2. iOS开发月报#10|201904
  3. MySQL Study之--Percona Server版本
  4. IIS识别Json文件
  5. MPLS ×××实验之OSPF sham-link
  6. [转载] 七龙珠第一部——第033话 龙的传说
  7. 合理的嵌入式开发学习路线
  8. Symfony2插件StofDoctrineExtensionsBundle的使用说明
  9. 第二阶段团队冲刺10
  10. Vue CLI 3 脚手架搭建