如何使用kaptchalaravel验证码组件件

博客分类:
最近由于Springside3的发布,也来凑热闹学习学习, 毕竟是国人的开源项目。 由于之前仅仅有听过,但是没有具体研究,所以算比较落后的。 不过这个项目确实是非常好的项目, 从中可以了解不少新新东西( -
可能是我太过时了!)
正好我最近需要给老婆开发个小东西,其中有用到验证码的生成, 在Springside里面找到个非常棒的组件---Jcaptcha
Springside对其做了封装,而且其官方的文档看起来也比较费力。所以自己琢磨了半天,才学会一个小的demo。
这里发上来, 希望能帮助有需要的人, (本人在网上找了不少资料, 所给的素材不是不全就是说的不太明白)
OK,开始,我先从一个示例开始。
首先来看看示例的目录结构:
在Jcaptcha的官方文档中有一个 5分钟快速入门的文章, 是介绍快速开发的文章。 有兴趣的可以去上面看看。
这里我发上我的源代码:
web.xml中:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"/dtd/web-app_2_3.dtd"&
&servlet-name&jcaptcha&/servlet-name&
&servlet-class&com.ivan.zhang.servlet.ImageCaptchaServlet&/servlet-class&
&load-on-startup&0&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&jcaptcha&/servlet-name&
&url-pattern&/jcaptcha&/url-pattern&
&/servlet-mapping&
&/web-app&
再需要一个服务类,用来产生Image Service类:
package com.ivan.zhang.
import java.awt.image.BufferedI
import java.io.ByteArrayOutputS
import java.io.IOE
import javax.imageio.ImageIO;
import javax.servlet.ServletC
import javax.servlet.ServletE
import javax.servlet.ServletOutputS
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.ivan.zhang.CaptchaServiceS
import com.octo.captcha.service.CaptchaServiceE
import com.sun.image.codec.jpeg.JPEGC
import com.sun.image.codec.jpeg.JPEGImageE
public class ImageCaptchaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
byte[] captchaChallengeAsJpeg =
// the output stream to render the captcha image as jpeg into
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
// get the session id that will identify the generated captcha.
// the same id must be used to validate the response, the session id
// is a good candidate!
String captchaId = httpServletRequest.getSession().getId();
// call the ImageCaptchaService getChallenge method
BufferedImage challenge = CaptchaServiceSingleton.getInstance()
.getImageChallengeForID(captchaId,
httpServletRequest.getLocale());
// a jpeg encoder
JPEGImageEncoder jpegEncoder = JPEGCodec
.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
} catch (CaptchaServiceException e) {
httpServletResponse
.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
// flush it in the response
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream = httpServletResponse
.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
OK,后台的类写完了, 现在我们来看看前台页面的编写:
&%@ page language="java" contentType="text/ charset=ISO-8859-1"
pageEncoding="UTF-8"%&
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&Insert title here&/title&
&form action="sample.jsp"&
&img src="jcaptcha"&
&input type='text' name='j_captcha_response' value=''&
sample.jsp: (用来验证的页面
&%@ page language="java" contentType="text/ charset=ISO-8859-1"
pageEncoding="UTF-8"%&
&%@page import="com.octo.captcha.service.CaptchaServiceException"%&
&%@page import="com.ivan.zhang.CaptchaServiceSingleton"%&
Boolean isResponseCorrect = Boolean.FALSE;
//remenber that we need an id to validate!
String captchaId = request.getSession().getId();
//retrieve the response
String responsestr = request.getParameter("j_captcha_response");
// Call the Service method
isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId, responsestr);
if(isResponseCorrect){
out.print("It's worng......");
} catch (CaptchaServiceException e) {
//should not happen, may be thrown if the id is not valid
这样,我们的第一个版本出来了, 我们来看看效果:
我们看到, 虽然生成了验证码,但是这样的图片给人非常不友好的感觉,
所以我参考Springside中的一样,自己给他设定产生图片的样式:
要实现自定义样式,我们需要一下2个步骤:
1. 告诉Jcaptcha 我要的样式是什么样子.
2. 在提交后,利用我们自己的样式来产生图片.
所以,我们改动一下 :
新加一个类GmailEngine.java(直接拿至Springside ,非常感谢白衣的共享,让我们这样的菜鸟学到很多东西.)
其中代码如下:
package com.ivan.zhang.
import java.awt.C
import java.awt.F
import java.awt.image.ImageF
import com.ponent.image.backgroundgenerator.BackgroundG
import com.ponent.image.backgroundgenerator.UniColorBackgroundG
import com.ponent.image.color.RandomListColorG
import com.ponent.image.deformation.ImageD
import com.ponent.image.deformation.ImageDeformationByF
import com.ponent.image.fontgenerator.FontG
import com.ponent.image.fontgenerator.RandomFontG
import com.ponent.image.textpaster.DecoratedRandomTextP
import com.ponent.image.textpaster.TextP
import com.ponent.image.textpaster.textdecorator.TextD
import com.ponent.image.wordtoimage.DeformedComposedWordToI
import com.ponent.image.wordtoimage.WordToI
import com.ponent.word.FileD
import com.ponent.poseDictionaryWordG
import com.ponent.word.wordgenerator.WordG
import com.octo.captcha.engine.image.ListImageCaptchaE
import com.octo.captcha.image.gimpy.GimpyF
* 仿照JCaptcha2.0编写GMail验证码样式的图片引擎.
* @author calvin
public class GMailEngine extends ListImageCaptchaEngine {
protected void buildInitialFactories() {
int minWordLength = 4;
int maxWordLength = 5;
int fontSize = 50;
int imageWidth = 250;
int imageHeight = 100;
//word generator
WordGenerator dictionnaryWords = new ComposeDictionaryWordGenerator(new FileDictionary("toddlist"));
//word2image components
TextPaster randomPaster = new DecoratedRandomTextPaster(minWordLength, maxWordLength,
new RandomListColorGenerator(new Color[] { new Color(23, 170, 27), new Color(220, 34, 11),
new Color(23, 67, 172) }), new TextDecorator[] {});
BackgroundGenerator background = new UniColorBackgroundGenerator(imageWidth, imageHeight, Color.white);
FontGenerator font = new RandomFontGenerator(fontSize, fontSize, new Font[] {
new Font("nyala", Font.BOLD, fontSize), new Font("Bell MT", Font.PLAIN, fontSize),
new Font("Credit valley", Font.BOLD, fontSize) });
ImageDeformation postDef = new ImageDeformationByFilters(new ImageFilter[] {});
ImageDeformation backDef = new ImageDeformationByFilters(new ImageFilter[] {});
ImageDeformation textDef = new ImageDeformationByFilters(new ImageFilter[] {});
WordToImage word2image = new DeformedComposedWordToImage(font, background, randomPaster, backDef, textDef,
addFactory(new GimpyFactory(dictionnaryWords, word2image));
如果有玩过Swing的兄弟,应该会很好理解上面的代码。
继续,我们有了自己的样式类, 接下来我们就要告诉servlet我们需要用哪个样式生成图片。
就有如下,将CaptchaServiceSingleton类修改一下:
package com.ivan.
import com.ivan.zhang.servlet.GMailE
import com.octo.captcha.engine.GenericCaptchaE
import com.octo.captcha.service.CaptchaS
import com.octo.captcha.service.captchastore.FastHashMapCaptchaS
import com.octo.captcha.service.image.DefaultManageableImageCaptchaS
import com.octo.captcha.service.image.ImageCaptchaS
* 按照官方的做法: 一定为单例
* @author Administrator
public class CaptchaServiceSingleton {
private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(
new FastHashMapCaptchaStore(), new GMailEngine(), 180,
100000 , 75000);
public static ImageCaptchaService getInstance(){
同样的,修改一下Servlet类:
package com.ivan.zhang.
import java.awt.image.BufferedI
import java.io.ByteArrayOutputS
import java.io.IOE
import javax.imageio.ImageIO;
import javax.servlet.ServletC
import javax.servlet.ServletE
import javax.servlet.ServletOutputS
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.ivan.zhang.CaptchaServiceS
import com.octo.captcha.service.CaptchaServiceE
import com.sun.image.codec.jpeg.JPEGC
import com.sun.image.codec.jpeg.JPEGImageE
public class ImageCaptchaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
genernateCaptchaImage(httpServletRequest, httpServletResponse);
* 生成验证码图片.
private void genernateCaptchaImage(final HttpServletRequest request, final HttpServletResponse response)
throws IOException {
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
String captchaId = request.getSession(true).getId();
BufferedImage challenge = (BufferedImage)
CaptchaServiceSingleton.getInstance().getChallengeForID(captchaId, request.getLocale());
ImageIO.write(challenge, "jpg", out);
out.flush();
} catch (CaptchaServiceException e) {
} finally {
out.close();
OK, 这样我们产生的图片样式就会好看多了。 不相信?
OK, 非要上图才有人相信。
再来一下刷新:
OK, 先写到这,希望对有需要的人有帮助。
如果有人懒得敲代码,我这里附上我的工程源代码, 不过我还是觉得,咱弄技术的人, 就得把键盘当筷子, 你见过非常饿,但不想拿筷子的人吗?(别说老外用叉子……)
(834.4 KB)
下载次数: 2975
论坛回复 /
(34 / 40121)
验证码主要是为了防止机器人对其辨识,如果就将图片修改的很容易辨认就意义不大了
我一直就搞不懂 驗證碼 有啥用呢?
能不能說具體一點呢? 為什麽多一個這個東西,沒感到它有什麽作用 就是多一次輸入而已呀?
& 上一页 1
浏览: 147278 次
来自: 杭州
思路十分不错,最近两家公司面试都问到了这个问题,我没有答出来, ...
楼主真是良苦用心,很可惜我现在才对Tomcat感兴趣并有时间来 ...
diecui1202 写道可以看看goldendoc.org小 ...
非常感谢~表示自己没用过jquery,如果 jquery地址改 ...
非常感谢!我今天就用到了!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'kaptcha 验证码组件使用简介
我的图书馆
kaptcha 验证码组件使用简介
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:
2.建立一个web项目,导入
3.配置web.xml文件
Java代码 &&!--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&&&
Java代码 &&&&&&servlet-mapping&&&&servlet-name&kaptcha&/servlet-name&&&&url-pattern&/ClinicCountManager/kaptcha.jpg&/url-pattern&&&/servlet-mapping&&&
jsp 页面使用
Java代码 &&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中配置
Java代码 &&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&&&
新建生成图片控制类
Java代码 &import&java.awt.image.BufferedI&&import&javax.imageio.ImageIO;&&import&javax.servlet.ServletOutputS&&import&javax.servlet.http.HttpServletR&&import&javax.servlet.http.HttpServletR&&import&org.springframework.beans.factory.annotation.A&&import&org.springframework.stereotype.C&&import&org.springframework.web.bind.annotation.RequestM&&import&org.springframework.web.servlet.ModelAndV&&import&com.google.code.kaptcha.C&&import&com.google.code.kaptcha.P&&&&@Controller&&@RequestMapping("/")&&public&class&CaptchaImageCreateController&{&&&&&&&&&&&&private&Producer&captchaProducer&=&&&&&&&&&@Autowired&&&&&&public&void&setCaptchaProducer(Producer&captchaProducer)&{&&&&&&&&&&this.captchaProducer&=&captchaP&&&&&&}&&&&&&&&@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&&&&&&&}&&&&}&&
&前台调用方式
Java代码 &&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&&&
&取验证码的方式
Java代码 &String&code&=&(String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);&&&&&&&&
&如果需要全部数字
Java代码 &&init-param&&&&&&&&&&&&&param-name&kaptcha.textproducer.char.string&/param-name&&&&&&&&&&&&&param-value&&/param-value&&&&&&&&&/init-param&&&
&去掉干扰线
Java代码 &&init-param&&&&&&&&param-name&kaptcha.noise.impl&/param-name&&&&&&&&param-value&com.google.code.kaptcha.impl.NoNoise&&/param-value&&&&/init-param&&&& & & &
TA的最新馆藏
喜欢该文的人也喜欢kaptcha验证码组件使用简介 - CSDN博客
kaptcha验证码组件使用简介
kaptcha验证码组件使用简介
Kaptcha是一个基于SimpleCaptcha的验证码开源项目。
官网地址:
kaptcha的使用比较方便,只需添加jar包依赖之后简单地配置就可以使用了。kaptcha所有配置都可以通过web.xml来完成,如果你的项目中使用了Spring MVC,那么则有另外的一种方式来实现。
一、简单的jsp-servlet项目
1.添加jar包依赖
如果你使用maven来统一管理jar包,则在工程的pom.xml中添加dependency
&!--&kaptcha&--&&&
&dependency&&&
&&&&&groupId&com.google.code.kaptcha&/groupId&&&
&&&&&artifactId&kaptcha&/artifactId&&&
&&&&&version&2.3.2&/version&&&
&/dependency&&&
如果是非maven管理的项目,则直接在官网下载kaptcha的jar包,然后添加到项目lib库中,下载地址:
2.配置web.xml
上面说了,kaptcha都是在web.xml中配置,我们必须在web.xml中配置kaptcha的servlet,具体如下:
&servlet&&&
&&&&&servlet-name&Kaptcha&/servlet-name&&&
&&&&&servlet-class&com.google.code.kaptcha.servlet.KaptchaServlet&/servlet-class&&&
&/servlet&&&
&servlet-mapping&&&
&&&&&servlet-name&Kaptcha&/servlet-name&&&
&&&&&url-pattern&/kaptcha.jpg&/url-pattern&&&
&/servlet-mapping&&&
其中servlet的url-pattern可以自定义。
kaptcha所有的参数都有默认的配置,如果我们不显示配置的话,会采取默认的配置。
如果要显示配置kaptcha,在配置kaptcha对应的Servlet时,在init-param增加响应的参数配置即可。示例如下:
&servlet&&&
&&&&&servlet-name&Kaptcha&/servlet-name&&&
&&&&&servlet-class&com.google.code.kaptcha.servlet.KaptchaServlet&/servlet-class&&&
&&&&&init-param&&&
&&&&&&&&&param-name&kaptcha.image.width&/param-name&&&
&&&&&&&&&param-value&200&/param-value&&&
&&&&&&&&&description&Width&in&pixels&of&the&kaptcha&image.&/description&&&
&&&&&/init-param&&&
&&&&&init-param&&&
&&&&&&&&&param-name&kaptcha.image.height&/param-name&&&
&&&&&&&&&param-value&50&/param-value&&&
&&&&&&&&&description&Height&in&pixels&of&the&kaptcha&image.&/description&&&
&&&&&/init-param&&&
&&&&&init-param&&&
&&&&&&&&&param-name&kaptcha.textproducer.char.length&/param-name&&&
&&&&&&&&&param-value&4&/param-value&&&
&&&&&&&&&description&The&number&of&characters&to&display.&/description&&&
&&&&&/init-param&&&
&&&&&init-param&&&
&&&&&&&&&param-name&kaptcha.noise.impl&/param-name&&&
&&&&&&&&&param-value&com.google.code.kaptcha.impl.NoNoise&/param-value&&&
&&&&&&&&&description&The&noise&producer.&/description&&&
&&&&&/init-param&&&
&/servlet&&&
具体的配置参数参见:
3.页面调用
&&&&Html代码
&form&action=&submit.action&&&&
&&&&&input&type=&text&&name=&kaptcha&&value=&&&/&&img&src=&kaptcha.jpg&&/&&&
&/form&&&
4.在submit的action方法中进行验证码校验
&&&&Java代码
//从session中取出servlet生成的验证码text值&&
String&kaptchaExpected&=&(String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);&&
//获取用户页面输入的验证码&&
String&kaptchaReceived&=&request.getParameter(&kaptcha&);&&
//校验验证码是否正确&&
if&(kaptchaReceived&==&null&||&!kaptchaReceived.equalsIgnoreCase(kaptchaExpected)){&&
&&&&setError(&kaptcha&,&&Invalid&validation&code.&);&&
}&&
5.实现页面验证码刷新
&&&&Html代码
&img&src=&kaptcha.jpg&&width=&200&&id=&kaptchaImage&&title=&看不清,点击换一张&&/&&&
&script&type=&text/javascript&&&&
&&&&$(function()&{&&
&&&&&&&&$('#kaptchaImage').click(function()&{$(this).attr('src','kaptcha.jpg?'&+&Math.floor(Math.random()&*&100));});&&
&/script&&&
&br&/&&small&看不清,点击换一张&/small&&
注:为了避免浏览器的缓存,可以在验证码请求url后添加随机数
二、Spring mvc项目中使用kaptcha
1.添加captchaProducer bean定义
&&&&Xml代码
&!--&配置kaptcha验证码&--&&&
&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&&50&/prop&&&
&&&&&&&&&&&&&&&&&&&&&prop&key=&kaptcha.noise.impl&&com.google.code.kaptcha.impl.NoNoise&/prop&&&
&&&&&&&&&&&&&&&&&&&&&prop&key=&kaptcha.textproducer.char.string&&abcdefghijklmnopqrstuvwxyz&/prop&&&
&&&&&&&&&&&&&&&&&&&&&prop&key=&kaptcha.textproducer.char.length&&4&/prop&&&
&&&&&&&&&&&&&&&&&/props&&&
&&&&&&&&&&&&&/constructor-arg&&&
&&&&&&&&&/bean&&&
&&&&&/property&&&
&/bean&&&
2.生成验证码的Controller
&&&&Java代码
import&java.awt.image.BufferedI&&
import&javax.imageio.ImageIO;&&
import&javax.servlet.ServletOutputS&&
import&javax.servlet.http.HttpServletR&&
import&javax.servlet.http.HttpServletR&&
import&org.springframework.beans.factory.annotation.A&&
import&org.springframework.stereotype.C&&
import&org.springframework.web.bind.annotation.RequestM&&
import&org.springframework.web.servlet.ModelAndV&&
import&com.google.code.kaptcha.C&&
import&com.google.code.kaptcha.P&&
@Controller&&
public&class&CaptchaImageCreateController&{&&
&&&&private&Producer&captchaProducer&=&&&
&&&&@Autowired&&
&&&&public&void&setCaptchaProducer(Producer&captchaProducer){&&
&&&&&&&&this.captchaProducer&=&captchaP&&
&&&&@RequestMapping(&/kaptcha.jpg&)&&
&&&&public&ModelAndView&handleRequest(HttpServletRequest&request,&HttpServletResponse&response)&throws&Exception{&&
&&&&&&&&//&Set&to&expire&far&in&the&past.&&
&&&&&&&&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&&&
}&&
3.校验用户输入的Controller
&&&&Java代码
&*&ClassName:&LoginController&&br/&&
&*&Function:&登录Controller.&&br/&&
@Controller&&
@RequestMapping(&/login&)&&
public&class&LoginController&{&&
&&&&&*&loginCheck:ajax异步校验登录请求.&&br/&&
&&&&&*&@param&request&
&&&&&*&@param&username&用户名&
&&&&&*&@param&password&密码&
&&&&&*&@param&kaptchaReceived&验证码&
&&&&&*&@return&校验结果&
&&&&@RequestMapping(value&=&&check&,&method&=&RequestMethod.POST)&&
&&&&@ResponseBody&&
&&&&public&String&loginCheck(HttpServletRequest&request,&&
&&&&&&&&&&&&@RequestParam(value&=&&username&,&required&=&true)&String&username,&&
&&&&&&&&&&&&@RequestParam(value&=&&password&,&required&=&true)&String&password,&&
&&&&&&&&&&&&@RequestParam(value&=&&kaptcha&,&required&=&true)&String&kaptchaReceived){&&
&&&&&&&&//用户输入的验证码的值&&
&&&&&&&&String&kaptchaExpected&=&(String)&request.getSession().getAttribute(&&
&&&&&&&&&&&&&&&&com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);&&
&&&&&&&&//校验验证码是否正确&&
&&&&&&&&if&(kaptchaReceived&==&null&||&!kaptchaReceived.equals(kaptchaExpected))&{&&
&&&&&&&&&&&&return&&kaptcha_error&;//返回验证码错误&&
&&&&&&&&}&&
&&&&&&&&//校验用户名密码&&
&&&&&&&&//&……&&
&&&&&&&&//&……&&
&&&&&&&&return&&success&;&//校验通过返回成功&&
}&&
注:以上来自 &/blog/1987636
本文已收录于以下专栏:
相关文章推荐
首先去官网下载了kaptcha的压缩包
下载地址在:下载地址
下载了后解压,文件目录里有
doc、javadoc、src、kaptcha.war、kaptcha-2.3.2.jar、kaptch...
Kaptcha是一个基于SimpleCaptcha的验证码开源项目。
官网地址:/p/kaptcha/
一、简单的jsp-servlet项目1.添加ja...
Kaptcha是一个基于SimpleCaptcha的验证码开源项目。
官网地址:/p/kaptcha/
kaptcha的使用比较方便,...
kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K...
使用kaptcha组件实现验证码几乎是以全配置的形式形式的,简单灵活,步骤如下:
1、导入组件包kaptcha-2.3.jar
2、web.xml文件中配置验证码图片的各种样式
Kaptcha...
javaWeb之使用Kaptcha组件使用验证码
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& ...
上篇,Java生成验证码,是用原生态的代码来生成图片验证码的,今天我又学习了一个新的方法,可以生成各种样式的图片验证码,体验效果更好,那就是利用kaptcha组件来实现。
1、首先创建w...
Kapatcha组件
Kaptcha组件实现更多功能的验证码功能,可以调整验证码的大小,图片背景,干扰线条颜色形状等,非常方便。
1,jsp部分
1.1--index.jsp
kaptcha 验证码组件
1.maven引入jar包
--------------------------------------------------------------------...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 bootstrap验证码组件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信