博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring mvc-kaptcha 验证码
阅读量:6968 次
发布时间:2019-06-27

本文共 5574 字,大约阅读时间需要 18 分钟。

hot3.png

生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目。使用Kaptcha 生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用。kaptcha所有配置都可以通过web.xml来完成,如果项目使用了Spring MVC,那么实现方式会略有不同。

一、Servlet项目

1、添加jar包依赖

   maven项目,在pom.xml中添加dependency

  
      
com.google.code.kaptcha
      
kaptcha
      
2.3.2
  

  非maven项目,在官网下载kaptcha的jar包,然后添加到项目lib库中。

  下载地址:

2、配置web.xml

      
Kaptcha
      
com.google.code.kaptcha.servlet.KaptchaServlet
  
  
      
Kaptcha
      
/kaptcha.jpg
 

    注:url-pattern 自定义

    kaptcha的参数都有默认值,如果要配置kaptcha,在init-param增加响应的参数即可

      
Kaptcha
      
com.google.code.kaptcha.servlet.KaptchaServlet
      
          
kaptcha.image.width
          
200
          
Width in pixels of the kaptcha image.
      
      
          
kaptcha.image.height
          
50
          
Height in pixels of the kaptcha image.
      
      
          
kaptcha.textproducer.char.length
          
4
          
The number of characters to display.
      
      
          
kaptcha.noise.impl
          
com.google.code.kaptcha.impl.NoNoise
          
The noise producer.
      
  

3、jsp代码

 $(function(){  //生成验证码             $('#kaptchaImage').click(function () {      $(this).hide().attr('src', '/code/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); });      });   window.onbeforeunload = function(){      //关闭窗口时自动退出      if(event.clientX>360&&event.clientY<0||event.altKey){             alert(parent.document.location);      }  };       function changeCode() {  //刷新    $('#kaptchaImage').hide().attr('src', '/code/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn();      event.cancelBubble=true;  }   
     
    
   
    
          
看不清?换一张  

二、Spring mvc 中使用kaptcha

1、spring 配置文件 applicationContext.xml

          
              
                  
                      
                          
yes                          
105,179,90                          
blue                          
125                          
45                          
45                          
code                          
4                          
宋体,楷体,微软雅黑                      
                  
                              

2、Controller的实现

import java.awt.image.BufferedImage;  import javax.imageio.ImageIO;  import javax.servlet.ServletOutputStream;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import javax.servlet.http.HttpSession;   import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.servlet.ModelAndView;  import com.google.code.kaptcha.Constants;  import com.google.code.kaptcha.Producer;   @Controller  @RequestMapping("/code")  public class CaptchaController {            @Autowired      private Producer captchaProducer = null;        @RequestMapping(value = "captcha-image")      public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {          HttpSession session = request.getSession();          String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);          System.out.println("验证码: " + code );                    response.setDateHeader("Expires", 0);          response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");          response.addHeader("Cache-Control", "post-check=0, pre-check=0");          response.setHeader("Pragma", "no-cache");          response.setContentType("image/jpeg");                  String capText = captchaProducer.createText();          session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);                  BufferedImage bi = captchaProducer.createImage(capText);          ServletOutputStream out = response.getOutputStream();          ImageIO.write(bi, "jpg", out);          try {              out.flush();          } finally {              out.close();          }          return null;      }  }

3、kaptcha可配置项

kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,no  kaptcha.border.color   边框颜色   默认为Color.BLACK  kaptcha.border.thickness  边框粗细度  默认为1  kaptcha.producer.impl   验证码生成器  默认为DefaultKaptcha  kaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreator  kaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwx  kaptcha.textproducer.char.length   验证码文本字符长度  默认为5  kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)  kaptcha.textproducer.font.size   验证码文本字符大小  默认为40  kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACK  kaptcha.textproducer.char.space  验证码文本字符间距  默认为2  kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoise  kaptcha.noise.color   验证码噪点颜色   默认为Color.BLACK  kaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipple  kaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRenderer  kaptcha.background.impl   验证码背景生成器   默认为DefaultBackground  kaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAY  kaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITE  kaptcha.image.width   验证码图片宽度  默认为200  kaptcha.image.height  验证码图片高度  默认为50

转载于:https://my.oschina.net/CandyDesire/blog/209364

你可能感兴趣的文章
OpenGL——旋转的六边形(动画)
查看>>
string operation in powershell
查看>>
PyCharm切换Python版本
查看>>
SQL Server中LIKE %search_string% 走索引查找(Index Seek)浅析
查看>>
在WPF中制作正圆形公章
查看>>
dataframe 合并(append, merge, concat)
查看>>
C#获取类名为Internet_Explorer_Server控件的内容
查看>>
几种常用网络传输协议
查看>>
Http请求头和响应头
查看>>
使用C++访问Google API
查看>>
画鬼最易
查看>>
如何恢复Windows“消失”的磁盘分区
查看>>
从工作流产品想到软件开发过程
查看>>
发布一个WM文件浏览器--foxBrowser (Specialized for SmartPhone)
查看>>
色拉英语第3集第3幕:Bottoms up
查看>>
fgetc的用法(一个字符的显示文件中的数据)
查看>>
答TOGAF企业架构的一些问题
查看>>
ERP专业词汇集合
查看>>
html css float left与 float right的使用说明(转)
查看>>
SharePoint中用不存在的"对象名"获取"对象"时的异常处理
查看>>