700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > kaptcha验证码组件使用简介

kaptcha验证码组件使用简介

时间:2019-01-09 07:22:56

相关推荐

kaptcha验证码组件使用简介

kaptcha验证码组件使用简介

Kaptcha是一个基于SimpleCaptcha的验证码开源项目。

官网地址:/p/kaptcha/

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库中,下载地址:/p/kaptcha/downloads/list

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>Widthinpixelsofthekaptchaimage.</description></init-param><init-param><param-name>kaptcha.image.height</param-name><param-value>50</param-value><description>Heightinpixelsofthekaptchaimage.</description></init-param><init-param><param-name>kaptcha.textproducer.char.length</param-name><param-value>4</param-value><description>Thenumberofcharacterstodisplay.</description></init-param><init-param><param-name>kaptcha.noise.impl</param-name><param-value>com.google.code.kaptcha.impl.NoNoise</param-value><description>Thenoiseproducer.</description></init-param></servlet>

具体的配置参数参见:/p/kaptcha/wiki/ConfigParameters

3.页面调用

Html代码

<formaction="submit.action"><inputtype="text"name="kaptcha"value=""/><imgsrc="kaptcha.jpg"/></form>

4.在submit的action方法中进行验证码校验

Java代码

//从session中取出servlet生成的验证码text值StringkaptchaExpected=(String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);//获取用户页面输入的验证码StringkaptchaReceived=request.getParameter("kaptcha");//校验验证码是否正确if(kaptchaReceived==null||!kaptchaReceived.equalsIgnoreCase(kaptchaExpected)){setError("kaptcha","Invalidvalidationcode.");}

5.实现页面验证码刷新

Html代码

<imgsrc="kaptcha.jpg"width="200"id="kaptchaImage"title="看不清,点击换一张"/><scripttype="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验证码--><beanid="captchaProducer"class="com.google.code.kaptcha.impl.DefaultKaptcha"><propertyname="config"><beanclass="com.google.code.kaptcha.util.Config"><constructor-argtype="java.util.Properties"><props><propkey="kaptcha.image.width">100</prop><propkey="kaptcha.image.height">50</prop><propkey="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop><propkey="kaptcha.textproducer.char.string">0123456789abcdefghijklmnopqrstuvwxyz</prop><propkey="kaptcha.textproducer.char.length">4</prop></props></constructor-arg></bean></property></bean>

2.生成验证码的Controller

Java代码

importjava.awt.image.BufferedImage;importjavax.imageio.ImageIO;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;importcom.google.code.kaptcha.Constants;importcom.google.code.kaptcha.Producer;@ControllerpublicclassCaptchaImageCreateController{privateProducercaptchaProducer=null;@AutowiredpublicvoidsetCaptchaProducer(ProducercaptchaProducer){this.captchaProducer=captchaProducer;}@RequestMapping("/kaptcha.jpg")publicModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//Settoexpirefarinthepast.response.setDateHeader("Expires",0);//SetstandardHTTP/1.1no-cacheheaders.response.setHeader("Cache-Control","no-store,no-cache,must-revalidate");//SetIEextendedHTTP/1.1no-cacheheaders(useaddHeader).response.addHeader("Cache-Control","post-check=0,pre-check=0");//SetstandardHTTP/1.0no-cacheheader.response.setHeader("Pragma","no-cache");//returnajpegresponse.setContentType("image/jpeg");//createthetextfortheimageStringcapText=captchaProducer.createText();//storethetextinthesessionrequest.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY,capText);//createtheimagewiththetextBufferedImagebi=captchaProducer.createImage(capText);ServletOutputStreamout=response.getOutputStream();//writethedataoutImageIO.write(bi,"jpg",out);try{out.flush();}finally{out.close();}returnnull;}}

3.校验用户输入的Controller

Java代码

/***ClassName:LoginController<br/>*Function:登录Controller.<br/>*/@Controller@RequestMapping("/login")publicclassLoginController{/***loginCheck:ajax异步校验登录请求.<br/>**@paramrequest*@paramusername用户名*@parampassword密码*@paramkaptchaReceived验证码*@return校验结果*/@RequestMapping(value="check",method=RequestMethod.POST)@ResponseBodypublicStringloginCheck(HttpServletRequestrequest,@RequestParam(value="username",required=true)Stringusername,@RequestParam(value="password",required=true)Stringpassword,@RequestParam(value="kaptcha",required=true)StringkaptchaReceived){//用户输入的验证码的值StringkaptchaExpected=(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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。