java验证码的实现
首先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验证码的实现相关推荐
- java 验证码透明背景_Java中的证书透明度验证
java 验证码透明背景 因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易. 牺牲了整个周末的一半时间,我可以证明这并不是一件小事. 但 ...
- java 验证码生成和验证
1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...
- java 验证码_java实现简单的验证码功能
最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...
- java 验证码旋转,java实现动态验证码
java动态实现验证码,供大家参考,具体内容如下 [实现效果] 点击图片或者文字可以更换验证码 验证码随机生成,由大小写字母和数字组成 验证码字体颜色随机生成,字母角度有偏转 干扰线随机分布 在这里插 ...
- Java验证码jar包ValidateCode.jar的使用(附百度网盘下载)
Java验证码jar包ValidateCode.jar的使用(附百度网盘下载地址) 在项目中我们会经常用写图片验证码这个功能.但是自己去封装也挺繁琐的,这里提供给各位小伙伴一个很好用的生成图片验证码的 ...
- java验证码识别库
java验证码识别库 使用J4L识别验证码 使用 Tess4J 进行 OCR 识别 使用J4L识别验证码 将解压文件下bits64目录的三个文件 liblept168.dll tess3Wrapper ...
- java验证码效果,和图片缩略效果
java验证码效果,和图片缩略效果 效果图:验证码 效果图:缩略 这两个效果我做在了一个类里面,可以进行调用,直接上代码 注:要是复制粘贴此代码,需要更改自己所使用的字体,也可以用我这个字体,记得更改 ...
- java验证码源码_Java通用验证码程序及应用示例(提供源码下载)
评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美! 回复 更多评论 # re ...
- java 验证码图片识别_JavaSE图像验证码简单识别程序详解
本文为大家分享了JavaSE图像验证码简单识别程序,供大家参考,具体内容如下 首先你应该对图片进行样本采集,然后将样本进行灰度处理,也就是变成黑白两色. 然后你就可以使用该类,对目标文件进行分析.具体 ...
- java验证码实现简单_java实现简单的验证码功能
最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...
最新文章
- BurpSuite的使用总结
- legacy bios与uefi两种模式安装windows8操作系统的方法
- xp电脑自动锁定计算机,WindowsXP系统组策略的锁死的解决方法
- python二叉树的创建与遍历
- AsyncEx - async/await 的辅助库
- [转载]数据层的多租户浅谈(SAAS多租户数据库设计)
- android trace获取和分析
- Java静态代理和动态代理(代理模式)详解
- 【VBA】Word批量改变图片的大小,进行排版
- #10098. 「一本通 3.6 例 1」分离的路径
- python中根据视频帧生成视频,保存为mp4格式
- 贴出最新整理的英语谚语大全(3267条)
- jpg怎么转换成pdf文档
- *p++ 和 *++p
- 2004年秋浙江省计算机等级考试二级C 编程题(2)
- 数据结构--图的存储结构
- SAP-MM MM STO订单详解1(工厂间的转储一步法和两步法)
- 2020顶尖黑帽seo优化教程
- @PostMapping
- 120年过去,历史不该忘记