栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

kaptcha验证码组件使用简介解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

kaptcha验证码组件使用简介解析

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

官网地址:http://code.google.com/p/kaptcha/

kaptcha的使用比较方便,只需添加jar包依赖之后简单地配置就可以使用了。kaptcha所有配置都可以通过web.xml来完成,如果你的项目中使用了Spring MVC,那么则有另外的一种方式来实现。

一、简单的jsp-servlet项目

1.添加jar包依赖

如果你使用maven来统一管理jar包,则在工程的pom.xml中添加dependency

 
 
  com.google.code.kaptcha 
  kaptcha 
  2.3.2 
 

如果是非maven管理的项目,则直接在官网下载kaptcha的jar包,然后添加到项目lib库中,下载地址:

http://code.google.com/p/kaptcha/downloads/list

2.配置web.xml

上面说了,kaptcha都是在web.xml中配置,我们必须在web.xml中配置kaptcha的servlet,具体如下:

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

其中servlet的url-pattern可以自定义。

kaptcha所有的参数都有默认的配置,如果我们不显示配置的话,会采取默认的配置。

如果要显示配置kaptcha,在配置kaptcha对应的Servlet时,在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. 
   
 

具体的配置参数参见:http://code.google.com/p/kaptcha/wiki/ConfigParameters

3.页面调用

 

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

//从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."); 
} 

注:确保JDK设置了 -Djava.awt.headless=true

5.实现页面验证码刷新

 
 

看不清,点击换一张

 注:为了避免浏览器的缓存,可以在验证码请求url后添加随机数

二、Spring mvc项目中使用kaptcha

1.添加captchaProducer bean定义

 
 
   
     
       
  
   100 
   50 
   com.google.code.kaptcha.impl.NoNoise 
   0123456789abcdefghijklmnopqrstuvwxyz 
   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 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 
public class CaptchaImageCreateController { 
  private Producer captchaProducer = null;  
  @Autowired 
  public void setCaptchaProducer(Producer captchaProducer){ 
    this.captchaProducer = captchaProducer; 
  }  
  @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 null; 
  } 
} 

3.校验用户输入的Controller


@Controller
@RequestMapping("/login")
public class LoginController {
	
	@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"; //校验通过返回成功
	}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/137244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号