码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC--动态验证码实现

时间:2018-02-11 14:49:03      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:eai   smp   aar   x11   awk   https   bim   hoj   fbv   

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

提供一个简单实现的demo。

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

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

技术分享图片

springMVC--动态验证码实现

标签:eai   smp   aar   x11   awk   https   bim   hoj   fbv   

原文地址:https://www.cnblogs.com/jpfss/p/8441199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!