`
BabyDuncan
  • 浏览: 573819 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring mvc与JKaptcha组合生成验证码

 
阅读更多
kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中。

使用kaptcha可以方便的配置:



    验证码的字体
    验证码字体的大小
    验证码字体的字体颜色
    验证码内容的范围(数字,字母,中文汉字!)
    验证码图片的大小,边框,边框粗细,边框颜色
    验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线)
    验证码的样式(鱼眼样式、3D、普通模糊……当然也可以继承com.google.code.kaptcha.GimpyEngine自定义样式)

……

详细信息请看下面的web.xml文件

下面介绍一下用法:

1.首先去官网下载jar:http://code.google.com/p/kaptcha/

2.建立一个web项目,导入kaptcha-2.3.jar到环境变量中。

3.配置web.xml文件
<!--Kaptcha 验证码  --><!--
	<servlet>
		<servlet-name>kaptcha</servlet-name>
		<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
		<init-param>
			<param-name>kaptcha.border</param-name>
			<param-value>no</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.border.color</param-name>
			<param-value>105,179,90</param-value>
		</init-param>		
		<init-param>
			<param-name>kaptcha.textproducer.font.color</param-name>
			<param-value>red</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.image.width</param-name>
			<param-value>250</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.image.height</param-name>
			<param-value>90</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.textproducer.font.size</param-name>
			<param-value>70</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.session.key</param-name>
			<param-value>code</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.textproducer.char.length</param-name>
			<param-value>4</param-value>
		</init-param>
		<init-param>
			<param-name>kaptcha.textproducer.font.names</param-name>
			<param-value>宋体,楷体,微软雅黑</param-value>
		</init-param>		
	</servlet>


      <servlet-mapping>
		<servlet-name>kaptcha</servlet-name>
		<url-pattern>/ClinicCountManager/kaptcha.jpg</url-pattern>
	</servlet-mapping>


jsp 页面使用
	<table>
			<tr>
				<td><img src="/ClinicCountManager/kaptcha.jpg"></td>
				<td valign="top">
			
					<form method="POST">
						<br>sec code:<input type="text" name="kaptchafield"><br />
						<input type="submit" name="submit">
					</form>
				</td>
			</tr>
		</table>	

		<br /><br /><br /><br />
		
		<%
			String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
			String parm = (String) request.getParameter("kaptchafield");
			
			out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");
			
			if (c != null && parm != null) {
				if (c.equals(parm)) {
					out.println("<b>true</b>");
				} else {
					out.println("<b>false</b>");
				}
			
		%>


上面的配置在普通jsp环境下面是有效的,如果在spring mvc环境下,则取不到session值,对于sping mvc环境验证码配置如下:

1.不用在web.xml进行相关配置,在applicationContext.xml中配置
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
		<property name="config">
			<bean class="com.google.code.kaptcha.util.Config">
				<constructor-arg>
					<props>
						<prop key="kaptcha.border">no</prop>
						<prop key="kaptcha.border.color">105,179,90</prop>
						<prop key="kaptcha.textproducer.font.color">red</prop>
						<prop key="kaptcha.image.width">250</prop>
						<prop key="kaptcha.textproducer.font.size">90</prop>
						<prop key="kaptcha.image.height">90</prop>
						<prop key="kaptcha.session.key">code</prop>
						<prop key="kaptcha.textproducer.char.length">4</prop>
						<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
					</props>
				</constructor-arg>
			</bean>
		</property>
	</bean>

新建生成图片控制类
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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("/")
public class CaptchaImageCreateController {
	
	private Producer captchaProducer = null;

	@Autowired
	public void setCaptchaProducer(Producer captchaProducer) {
		this.captchaProducer = captchaProducer;
	}

	@RequestMapping("/captcha-image")
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

		response.setDateHeader("Expires", 0);
		// Set standard HTTP/1.1 no-cache headers.
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
		// Set standard HTTP/1.0 no-cache header.
		response.setHeader("Pragma", "no-cache");
		// return a jpeg
		response.setContentType("image/jpeg");
		// create the text for the image
		String capText = captchaProducer.createText();
		// store the text in the session
		request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
		// create the image with the text
		BufferedImage bi = captchaProducer.createImage(capText);
		ServletOutputStream out = response.getOutputStream();
		// write the data out
		ImageIO.write(bi, "jpg", out);
		try {
			out.flush();
		} finally {
			out.close();
		}
		return null;
	}

}

前台调用方式
 <div class="chknumber">
        <label>验证码:        
        <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />             
        </label>
         <img src="/ClinicCountManager/captcha-image.do" width="55" height="20" id="kaptchaImage"  style="margin-bottom: -3px"/> 
        <script type="text/javascript">    
         $(function(){         
             $('#kaptchaImage').click(function () {//生成验证码
            	 $(this).hide().attr('src', '/ClinicCountManager/captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); })    
                   }); 
       
        </script> 
      </div>


验证方式:
		String code = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
			
分享到:
评论

相关推荐

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    spring mvc 使用kaptcha配置生成验证码实例

    本篇文章主要介绍了spring mvc 使用kaptcha生成验证码实例,详细的介绍了使用Kaptcha 生成验证码的步骤,有兴趣的可以了解一下

    patchca整合Spring MVC

    Spring MVC的使用kaptcha生成验证码 patchca整合Spring MVC生成漂亮的验证码 两种验证码的生成例子。

    spring mvc 官方文档

    本文详细介绍spring MVC的原理和开发心得体会。

    精通Spring MVC 4 中文

    精通Spring MVC 4 中文

    Spring MVC+MyBatis开发从入门到项目实战

    第4篇是Spring MVC与MyBatis的项目整合实战,通过对水果网络销售平台的需求分析、功能设计、数据库设计以及模块详细编码实现,让读者了解整合项目开发的整体流程。 《Spring MVC+MyBatis开发从入门到项目实战》对...

    Spring MVC 基于注解实例

    Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx案例8:Spring整合Spring MVC与Hibernate + EasyUI...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.pdf

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.pdf案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.pdf案例8:Spring整合Spring MVC与Hibernate + EasyUI...

    [免费]Spring MVC学习指南(高清)

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

    Spring MVC所需jar包

    Spring MVC所需jar包,包含java开发中 Spring MVC架构中最常用的jar包

    Spring MVC与MYBatis企业应用实战.pdf

    Spring MVC与MYBatis企业应用实战.pdf Spring MVC与MYBatis企业应用实战.pdf

    Spring MVC jar包

    关于构建Sping MVC的Jar包,包括Sping2.5.6和Hibernate3.6.8

    Spring MVC 入门实例

    在 Spring MVC 中, jsp 文件中尽量不要有 Java 代码, 只有 HTML 代码和"迭代(forEach)"与"判断(if)"两个jstl标签. jsp 文件只作为渲染(或称为视图 View)模板使用. 好了, 我们开始吧. 首先我们需要一个放在 WEB-INF...

    大优惠 Spring MVC学习指南(第2版)2017.pdf

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

    spring MVC数据绑定大全

    spring MVC数据绑定 含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便 本人最开始也是这么认为 经过一段...

    spring mvc源代码

    spring mvc4.1.4 源代码 spring mvc4.1.4 源代码spring mvc4.1.4 源代码spring mvc4.1.4 源代码spring mvc4.1.4 源代码

    Spring MVC 4.2.3

    Spring mvc jar包

Global site tag (gtag.js) - Google Analytics