Spring MVC中配置Kaptcha验证码

         验证码的功能主要是防止用户利用机器人自动注册、登录、灌水而采用的验证技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR光学字符识别),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能进行其他操作。

         Kaptcha是一款开源的验证码生成工具类,可以通过简单的配置就可以生成验证码图片,也可通过实现特定的接口来实现一些特殊的需求,下面简单介绍一下Kaptcha在spring mvc中的简单配置。

1、下载

下载地址:http://code.google.com/p/kaptcha/

目前版本为2.3.2

2、applicationContext.xml文件配置

在applicationContext文件中配置kaptcha对应的bean:

 <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
		        <property name="config">
		                <bean class="com.google.code.kaptcha.util.Config">
						        <!--通过构造函数注入属性值 -->
		                        <constructor-arg type="java.util.Properties">
		                                <props>
		                                    <!-- 验证码宽度 -->
	                                        <prop key="kaptcha.image.width">100</prop> 
	                                        <!-- 验证码高度 -->
	                                        <prop key="kaptcha.image.height">40</prop>
	                                        <!-- 生成验证码内容范围 -->
	                                        <prop key="kaptcha.textproducer.char.string">0123456789</prop>
	                                        <!-- 验证码个数 -->
	                                        <prop key="kaptcha.textproducer.char.length">4</prop>
	                                        <!-- 是否有边框 -->
	                                        <prop key="kaptcha.border">yes</prop>
	                                        <!-- 边框颜色 -->
	                                        <prop key="kaptcha.border.color">105,179,90</prop>
	                                        <!-- 边框厚度 -->
	                                        <prop key="kaptcha.border.thickness">1</prop>
	                                        <!-- 验证码字体颜色 -->
	                                        <prop key="kaptcha.textproducer.font.color">red</prop>
	                                        <!-- 验证码字体大小 -->
	                                        <prop key="kaptcha.textproducer.font.size">40</prop>
	                                        <!-- 验证码所属字体样式 -->
	                                        <prop key="kaptcha.textproducer.font.names">BKamrnBd</prop>
	                                           <!-- 干扰线颜色 -->
	                                        <prop key="kaptcha.noise.color">blue</prop>
	                                        <!-- 验证码文本字符间距 -->
	                                        <prop key="kaptcha.textproducer.char.space">3</prop>
                                        </props>
		                        </constructor-arg>
		                </bean>
		        </property>
		 </bean>

3、Controller类中添加图片生成方法

@RequestMapping("/kaptcha.html")  
	public void initCaptcha(HttpServletRequest request,  
            HttpServletResponse response) throws Exception{

          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();  
          request.getSession().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();  
          }  
	}

4、jsp页面中添加验证码

在jsp页面中添加如下img页面标签

<img class="kaptcha" id="kaptcha" src="kaptcha.html"/>

我这里的src=”kaptcha.html”,这样写是因为我在web.xml中的配置如下所示:

 <servlet>
     <servlet-name>yao</servlet-name>
	 <servlet-class>
	    org.springframework.web.servlet.DispatcherServlet
	 </servlet-class>
	 <load-on-startup>2</load-on-startup>
  </servlet>
  
  <servlet-mapping>
       <servlet-name>yao</servlet-name>
	   <url-pattern>*.html</url-pattern>
  </servlet-mapping>

url-pattern对应的是以html结尾的请求,所以在src中就要写成以html结尾,不然的话就无法生成验证码图片,还有就是src对应的值要跟java类中生成验证码图片方法的@RequestMapping("/kaptcha.html")  中的值相对应。(html结尾后缀只是我这里自定义的,可以修改为其他合法的后缀符)

5、后台验证

从session中获取生成的验证码:

String kaptchaCode = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

只要拿这个获取到的验证码跟页面上传过来的验证码进行比对就可知是否验证通过。

6、页面上刷新验证码

有时候生成的验证码我们可能无法看清,这时就需要点击验证码图片刷新重新生成验证码,只需在js中添加如下代码:

$(document).ready(
  function (){
	  $('#kaptcha').click(
		  function (){
				$(this).attr('src', 'kaptcha.html?' + Math.floor(Math.random() * 100));  
		  }
	  );
	  
  }
);    

到这为止,在spring mvc中配置kaptcha验证码已经基本完成了,效果图如下所示:



你可能感兴趣的:(Spring MVC中配置Kaptcha验证码)