在网站开发过程中我们一般都会为了防止用户连续提交都会提供验证码的功能,简单来说就是生成一个动态图片,在图片中保存一些校验信息,将校验信息放到session中和用户提交的验证码信息进行对比,如果出现错误则要提示验证码错误。

提供一个简单实现的demo。

  1. @Controller
  2. @RequestMapping("/auth")
  3. public class AuthCodeController {
  4. private char[] codeSequence = { 'A', '1','B', 'C', '2','D','3', 'E','4', 'F', '5','G','6', 'H', '7','I', '8','J',
  5. 'K',   '9' ,'L', '1','M',  '2','N',  'P', '3', 'Q', '4', 'R', 'S', 'T', 'U', 'V', 'W',
  6. 'X', 'Y', 'Z'};
  7. @RequestMapping("/code")
  8. public void getCode(HttpServletResponse response,HttpSession session) throws IOException{
  9. int width = 63;
  10. int height = 37;
  11. Random random = new Random();
  12. //设置response头信息
  13. //禁止缓存
  14. response.setHeader("Pragma", "No-cache");
  15. response.setHeader("Cache-Control", "no-cache");
  16. response.setDateHeader("Expires", 0);
  17. //生成缓冲区image类
  18. BufferedImage image = new BufferedImage(width, height, 1);
  19. //产生image类的Graphics用于绘制操作
  20. Graphics g = image.getGraphics();
  21. //Graphics类的样式
  22. g.setColor(this.getColor(200, 250));
  23. g.setFont(new Font("Times New Roman",0,28));
  24. g.fillRect(0, 0, width, height);
  25. //绘制干扰线
  26. for(int i=0;i<40;i++){
  27. g.setColor(this.getColor(130, 200));
  28. int x = random.nextInt(width);
  29. int y = random.nextInt(height);
  30. int x1 = random.nextInt(12);
  31. int y1 = random.nextInt(12);
  32. g.drawLine(x, y, x + x1, y + y1);
  33. }
  34. //绘制字符
  35. String strCode = "";
  36. for(int i=0;i<4;i++){
  37. String rand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
  38. strCode = strCode + rand;
  39. g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
  40. g.drawString(rand, 13*i+6, 28);
  41. }
  42. //将字符保存到session中用于前端的验证
  43. session.setAttribute("authCode", strCode.toLowerCase());
  44. g.dispose();
  45. ImageIO.write(image, "JPEG", response.getOutputStream());
  46. response.getOutputStream().flush();
  47. }
  48. public  Color getColor(int fc,int bc){
  49. Random random = new Random();
  50. if(fc>255)
  51. fc = 255;
  52. if(bc>255)
  53. bc = 255;
  54. int r = fc + random.nextInt(bc - fc);
  55. int g = fc + random.nextInt(bc - fc);
  56. int b = fc + random.nextInt(bc - fc);
  57. return new Color(r,g,b);
  58. }
  59. }
@Controller
@RequestMapping("/auth")
public class AuthCodeController {
private char[] codeSequence = { 'A', '1','B', 'C', '2','D','3', 'E','4', 'F', '5','G','6', 'H', '7','I', '8','J',
'K', '9' ,'L', '1','M', '2','N', 'P', '3', 'Q', '4', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z'}; @RequestMapping("/code")
public void getCode(HttpServletResponse response,HttpSession session) throws IOException{
int width = 63;
int height = 37;
Random random = new Random();
//设置response头信息
//禁止缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0); //生成缓冲区image类
BufferedImage image = new BufferedImage(width, height, 1);
//产生image类的Graphics用于绘制操作
Graphics g = image.getGraphics();
//Graphics类的样式
g.setColor(this.getColor(200, 250));
g.setFont(new Font("Times New Roman",0,28));
g.fillRect(0, 0, width, height);
//绘制干扰线
for(int i=0;i&lt;40;i++){
g.setColor(this.getColor(130, 200));
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(12);
int y1 = random.nextInt(12);
g.drawLine(x, y, x + x1, y + y1);
} //绘制字符
String strCode = "";
for(int i=0;i&lt;4;i++){
String rand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
strCode = strCode + rand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand, 13*i+6, 28);
}
//将字符保存到session中用于前端的验证
session.setAttribute("authCode", strCode.toLowerCase());
g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream());
response.getOutputStream().flush();
} public Color getColor(int fc,int bc){
Random random = new Random();
if(fc&gt;255)
fc = 255;
if(bc&gt;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);
}

}

在jsp文件中请求这个图片地址

  1. <label><img type="image" src="/auth/code" id="codeImage"  style="cursor:pointer;"/></label>  
<label><img type="image" src="/auth/code" id="codeImage"  style="cursor:pointer;"/></label>

效果:

aaarticlea/png;base64,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" alt="">

springMVC--动态验证码实现的更多相关文章

  1. 由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)

    背景: 12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样.而多家 ...

  2. C#之asp.net 及MVC 生成动态验证码:

    C#之asp.net 及MVC 生成动态验证码: 1.生成验证码字符串 // 随机生成指定长度的验证码字符串private string RandomCode(int length) { string ...

  3. 动态验证码处理UI自动化获取处理

    解决思路两种:1.直接linux catalina.out读取:一分每10s轮询出现新的直接读取返回<br>2.缓存注入cookie,先手动登录获取session 然后通过注入user,p ...

  4. Django之动态验证码的生成

    kind.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. java的动态验证码单线设计

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  6. Servlet仿CSDN动态验证码的生成-带数字和字母

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,须要创建一个Servlet.该Servlet通过字节型响应给cl ...

  7. .NET中生成动态验证码

    .NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到 ...

  8. Linux下使用Google Authenticator配置SSH登录动态验证码

    1.一般ssh登录服务器,只需要输入账号和密码.2.本教程的目的:在账号和密码之间再增加一个验证码,只有输入正确的验证码之后,再输入密码才能登录.这样就增强了ssh登录的安全性.3.账号.验证码.密码 ...

  9. thinkphp 动态验证码

    <?php namespace Home\Controller; use Think\Controller; class TestController extends Controller { ...

  10. iOS本地动态验证码生成-b

    用于ios本地动态生成验证码,效果如下: demo.gif 导入CoreGraphics.framework用于绘制图形 封装UIView,便捷使用,代码如下: AuthcodeView.h #imp ...

随机推荐

  1. 【转帖】WebRTC回声抵消模块简要分析

    webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:回声时延估计:NLMS(归一化最小均方自适应算法):NLP(非线性滤波):CNG(舒适噪声产生).一般经典aec算法还应包括双 ...

  2. 并发和多线程(九)--AbstractQueuedSynchronizer排他锁基本原理

    AbstractQueuedSynchronizer简称为AQS,AQS是ReentrantLock.CountdownLatch.CycliBarrier等并发工具的原理/基础,所以了解AQS的原理 ...

  3. 阿里云 Aliplayer高级功能介绍(四):直播时移

    基本介绍 时移直播基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址:对于常规的HLS直播而言,TS分片地址及相应 ...

  4. Consul 安装的与启动

    1.下载地址:https://www.consul.io/downloads.html linux 下载地址: wget https://releases.hashicorp.com/consul/0 ...

  5. Chrome浏览器console控制台不打印任何js错误信息

    手欠在Chrome控制台在错误信息,右键:Hide messages from vue 看不到 报错信息 这里删除成 默认的Filter 报错就出现了

  6. Hie with the Pie (POJ 3311) 旅行商问题

    昨天想练习一下状态压缩,百度搜索看到有博客讨论POJ 3311,一看就是简单的旅行商问题,于是快速上手写了状态压缩,死活样例都没过... 画图模拟一遍原来多个城市可以重复走,然后就放弃思考了... 刚 ...

  7. Struts2OGNL

    OGNL: 什么是OGNL  Object Graph Navigation Language 开源项目,取代页面中Java脚本,简化数据访问 和EL同属于表达式语言,但功能更为强大  OGNL在St ...

  8. 同一个局域网内,使用 java 从服务器共享文件夹中复制文件到本地。

    1 引用jar 包 <dependency> <groupId>org.samba.jcifs</groupId> <artifactId>jcifs& ...

  9. Spring Security Web应用入门环境搭建

    在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...

  10. 大牛就别进来了.npm --save-dev --save 的区别

    --save-dev 是你开发时候依赖的东西,--save 是你发布之后还依赖的东西. 比如,你写 ES6 代码,如果你想编译成 ES5 发布那么 babel 就是devDependencies.如果 ...