验证码是抵抗批量操作和恶意登录最有效的方式之一。

验证码从产生到现在已经衍生出了很多分支、方式。google kaptcha 是一个非常实用的验证码生成类库。

通过灵活的配置生成各种样式的验证码,并将生成的验证码字符串放到 HttpSession 中,方便获取进行比较。

本文描述在 spring mvc 下快速的将 google kaptcha 集成到项目中(单独使用的话在 web.xml 中配置 KaptchaServlet)。

1.maven 依赖

官方提供的 pom 无法正常使用,使用阿里云仓库对应 kaptcha。

<!-- google 验证码 -->
<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>${kaptcha.version}</version>
</dependency>

2.前端

<img id="kaptchaImage" src="${pageContext.request.contextPath}/captcha-image" width="116" height="36">

    $(function(){$('#kaptchaImage').click(function () {$(this).hide().attr('src', '${ctx}/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn();event.cancelBubble=true;});});

3.mvc-context 配置

 <!--goole captcha 验证码配置--><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.textproducer.font.size">45</prop><prop key="kaptcha.textproducer.font.color">blue</prop><prop key="kaptcha.textproducer.char.length">4</prop><prop key="kaptcha.session.key">code</prop></props></constructor-arg></bean></property></bean>

更多参数:http://www.cnblogs.com/louis80/p/5230507.html

4.服务端

@Controller
public class CaptchaController {private final Producer captchaProducer;@Autowiredpublic CaptchaController(Producer captchaProducer) {this.captchaProducer = captchaProducer;}@RequestMapping(value = "captcha-image")public String getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");response.setContentType("image/jpeg");String capText = captchaProducer.createText();request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);BufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();ImageIO.write(bi, "jpg", out);try {out.flush();} finally {out.close();}return null;}
}

5.session 中获取验证码

request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);

Spring MVC 中使用 Google kaptcha 验证码相关推荐

  1. Spring mvc 中使用 kaptcha 验证码

    2019独角兽企业重金招聘Python工程师标准>>> 生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptc ...

  2. 彻底解决Spring mvc中时间的转换和序列化等问题

    彻底解决Spring mvc中时间的转换和序列化等问题 参考文章: (1)彻底解决Spring mvc中时间的转换和序列化等问题 (2)https://www.cnblogs.com/childkin ...

  3. spring mvc中的@propertysource

    在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: @PropertySource  在spring 3.1中开始引入 比如有配置文件 config.propert ...

  4. spring_在Spring MVC中使用多个属性文件

    spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...

  5. Spring MVC中处理Request和Response的策略

    前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 作者:码农小胖哥, 图文编辑:xj 来源:https://mp.weixin.qq.com/s/3eFygsiVl8dC2nRy8_8n5 ...

  6. Spring MVC 中的 forward 和 redirect

    Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们配置某个 ViewRes ...

  7. Spring MVC中获取当前项目的路径

    Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...

  8. Spring 2.5:Spring MVC中的新特性

    转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...

  9. Spring MVC中的二三事

    HandlerMapping和HandlerAdapter 这个两个组件应该算是spring mvc中最重要的几个组件之一了,当一个请求到达DispatcherSerlvet后,spring mvc就 ...

最新文章

  1. dedecms /member/reg_new.php SQL Injection Vul
  2. 英伟达小姐姐的Python隐藏技巧合集,推特2400赞,代码可以直接跑
  3. string.h 的实现
  4. 鉴机识变,面向未来|RocketMQ Summit 2022 即将来袭
  5. BOOL与bool的区别(bool不是c的关键字,c++中bool也不是int)
  6. Python---shelve模块
  7. 2440 休眠唤醒的实现过程(作者:wogoyixikexie@gliet)
  8. 课程设计---约瑟夫环
  9. 有关/etc/resolv.conf、/etc/hosts、/etc/sysconfig/network
  10. 数组|leetcode27.移除元素
  11. MFC中CString转换成char数组的问题
  12. 导入ansys的实体怎么进行parameter_ANSYS在线缆线束设计中的仿真应用
  13. 撩开Docker的面纱
  14. 被弃用的 Docker 未死:带着 1.05 亿美元融资“回归”,估值高达 21 亿
  15. 微信小程序发布流程(上传审核)
  16. C++封装Detours库挂钩函数
  17. Altium Designer之泪点和常规铺铜操作笔记
  18. u大师u盘装系统win7_使用U盘安装Win7/Win8/Win10系统完美教程
  19. iPad如何分屏?iPad分屏详细教程来啦!
  20. 06【连词】 Conjunction

热门文章

  1. python支持向量机框架_Netflix 内部 Python 框架 Metaflow 正式开源,可加速机器学习模型部署...
  2. php怎样弄成中文,php怎样替换中文字符
  3. java 继承先后顺序_Java中的继承关系的加载顺序
  4. 关于 #!/bin/bash脚本头文件的类型说明
  5. c语言贪吃蛇编写分析,刚学C语言,想写一个贪吃蛇的代码
  6. 怎样快速学习html5,如何快速学习HTML5?带你了解HTML5学什么?
  7. ios底部栏设计规范_UI设计:iOS 界面规范
  8. spark连接Oracle数据库,Spark通过jdbc采用分区的方式从oracle读数据
  9. Node学习9-gulp
  10. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)