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使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版