Sping mvc 环境下使用kaptcha 生成验证码

2023-12-17 13:58

本文主要是介绍Sping mvc 环境下使用kaptcha 生成验证码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、kaptcha 的简介

kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。

同时将生成的验证码字符串放到 HttpSession中。

使用kaptcha可以方便的配置:

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

 

二、生成验证码的案例

 

下面介绍一下用法:

 

1. 下载该依赖包

 

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

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

方式二:网盘下载jar包: http://yunpan.cn/cdjzkrjKgQ7eD  访问密码 754f

           没有FQ的同学可以通过该路径下载。

 

2. 新建一个java web项目  SpringKaptcha ,并配置好Spring的环境。

 

可以参考:

基于XML配置的Spring MVC 简单的HelloWorld实例应用

基于注解配置的Spring MVC 简单的HelloWorld实例应用

 

spring-mvc.xml 配置文件:

 

  View Code

 

web.xml 配置文件:

 

  View Code

 

 

3.  我们专注于验证码的生成工作。

 

(1)在spring-mvc.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">80</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>  
复制代码

 

 

(2)添加 生成验证码的 controller。

 

复制代码
package com.souvc.app.base.captcha;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;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;/*** 防止Captcha机器人登陆* @author liuwang**/
@Controller
@RequestMapping("/kaptcha/*")
public class CaptchaController {@Autowiredprivate Producer captchaProducer = null;@RequestMappingpublic ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpSession session = request.getSession();String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);System.out.println("******************验证码是: " + code + "******************");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 jpegresponse.setContentType("image/jpeg");// create the text for the imageString capText = captchaProducer.createText();// store the text in the session
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);// create the image with the textBufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();// write the data outImageIO.write(bi, "jpg", out);try {out.flush();} finally {out.close();}return null;}}
复制代码

 

(3)jsp代码

 

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/functions.js"></script><title>测试页面</title>
<script type="text/javascript">
$(function(){       $('#kaptchaImage').click(function () {//生成验证码$(this).hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();event.cancelBubble=true;});
}); window.onbeforeunload = function(){//关闭窗口时自动退出if(event.clientX>360&&event.clientY<0||event.altKey){   alert(parent.document.location);}
};function changeCode() {$('#kaptchaImage').hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();event.cancelBubble=true;
}
</script>
</head>
<body><div class="chknumber"><label>验证码:<input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />             </label><br /><img src="./kaptcha/getKaptchaImage.do" id="kaptchaImage"  style="margin-bottom: -3px"/><a href="#" οnclick="changeCode()">看不清?换一张</a>
</div>
</body>
</html>
复制代码

 

简洁jsp 版本:

复制代码
 <div class="lr-formWrap"><input type="text" class="lr-input" placeholder="请输入图片验证码" style="width:145px;padding-left:15px" id="imageCode" name="imageCode" value=""><div class="fn-right"><img id="randImage" border="0" align="absmiddle" src="${basePath }/captcha-image" name="randImage"  alt="验证码"  width="115px" height="39px"/></div><p class="lr-tip" id="imageCode-lr-tip"></p></div>
复制代码

 

简洁js版本 :

 

复制代码
//生成验证码$('#randImage').click(function () {$(this).hide().attr('src', '${basePath}/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); });//刷新后,生成验证码$('#refreshCode').click(function () {$('#randImage').hide().attr('src', '${basePath}/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); });
复制代码

 

温馨提示:

获取验证码的关键语句,如下:

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

 

(4) kaptcha可配置项

复制代码
kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,no
kaptcha.border.color   边框颜色   默认为Color.BLACK
kaptcha.border.thickness  边框粗细度  默认为1
kaptcha.producer.impl   验证码生成器  默认为DefaultKaptcha
kaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreator
kaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwx
kaptcha.textproducer.char.length   验证码文本字符长度  默认为5
kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
kaptcha.textproducer.font.size   验证码文本字符大小  默认为40
kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACK
kaptcha.textproducer.char.space  验证码文本字符间距  默认为2
kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoise
kaptcha.noise.color   验证码噪点颜色   默认为Color.BLACK
kaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipple
kaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRenderer
kaptcha.background.impl   验证码背景生成器   默认为DefaultBackground
kaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAY
kaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITE
kaptcha.image.width   验证码图片宽度  默认为200
kaptcha.image.height  验证码图片高度  默认为50 
复制代码

 

 

(6)验证验证码是否正确的方法:

复制代码
@RequestMapping(value = "/checkRandCode", method = RequestMethod.GET)public void checkRandCode(HttpServletRequest request,HttpServletResponse response) {Map<String, Object> map = new HashMap<String, Object>();try {String randCode = request.getParameter("randCode");logger.info("randCode: " +randCode);String status = "0";String code = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);if(randCode.toLowerCase().equals(code.toLowerCase()))status="1";map.put("status", status);map.put("description", "");String data = JSONObject.fromObject(map).toString();logger.info("返回给页面的数据为: " + data);response.getWriter().print(data);response.getWriter().flush();response.getWriter().close();} catch (Exception ex) {logger.error(ex.getMessage(), ex);}
复制代码

 

(7) 默认值

 


这篇关于Sping mvc 环境下使用kaptcha 生成验证码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504622

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖