热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringMVC项目中使用kaptcha生成验证码

一、简介kaptcha是一个基于SimpleCaptche的验证码开源项目二、使用1、添加jar包依赖如果你使用maven来统一管理jar包,则在工程的pom.xml中添加dependency<

一、简介

kaptcha是一个基于SimpleCaptche的验证码开源项目

二、使用

1、添加jar包依赖

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

  

com.google.code.kaptcha
kaptcha
2.3.2

2、添加kaptcha的配置文件spring-kaptcha.xml并定义类captchaProducer


xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cOntext="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd"
default-autowire="byName">

id="captchaProducer"
class="com.google.code.kaptcha.impl.DefaultKaptcha">




no
105,179,90
blue
250
90
90
code
4
宋体,楷体,微软雅黑
0123456789





3、使用注解的方式把定义的Bean注入到生成验证码的Controller中

@Autowired
private Producer captchaProducer;

4、生成验证码

@Controller
@RequestMapping("/corp/portal")
public class CorpPortalController extends BaseController {
/* 企业找回密码验证码 */
     private static final String CORP_FIND_PWD_AUTH_CODE = "corpFindPwdAuthCode"; 
/**
* 生成找回密码的验证码
*/
@RequestMapping("/findPwdAuthCode.htm")
public void findPwdAuthCode(HttpServletRequest request, HttpServletResponse response, HttpSession session)
throws IOException {
/* Expires过时期限值,指浏览器或缓存服务器在该时间点后必须从真正的服务器中获取新的页面信息 */
response.setDateHeader("Expires", 0);
/* 浏览器和缓存服务器都不应该缓存页面信息 */
//response.setHeader("Cache-Control", "no-cache");
/* 请求和响应的信息都不应该被存储在对方的磁盘系统中 */
//response.setHeader("Cache-Control", "no-store");
/* 浏览器和缓存服务器都可以缓存页面信息 */
//response.setHeader("Cache-Control", "public");
/* 对于客户机的每次请求,代理服务器必须向服务器验证缓存是否过时 */
//response.setHeader("Cache-Control", "must-revalidate");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
/* 不让浏览器或中间缓存服务器缓存页面,配合Expires 置为0限定更保险 */
response.setHeader("Pragma", "no-cache");
/*
* response.setContentType(MIME)的作用是使客户端浏览器区分不同类型的数据,
* 并根据不同的MIME调用浏览器内部不同的程序嵌入模块来处理相应的数据
*/
response.setContentType("image/jpeg");
/* 生成验证码 */
String capText = captchaProducer.createText();
/* 保存验证码到Session中 */
request.getSession().setAttribute(CORP_FIND_PWD_AUTH_CODE, capText);
/* 使用给定文字创建图片 */
BufferedImage bi = captchaProducer.createImage(capText);
/* 数据写入输出流 */
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
}









推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
author-avatar
Lovely_Janle
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有