Spring MVC Captcha 验证码
本文专为不想一遍遍手写验证码代码的”懒猿“而生,只需要添加部分配置文件,拷贝一个控制层代码,就能在页面中方便使用。话不多说,进入主题:
一. Spring MVC 环境实现方式:
1.1 spring-mvc.xml
- <!--kaptcha登录验证码 -->
- <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">200</prop>
- <prop key="kaptcha.textproducer.font.size">48</prop>
- <prop key="kaptcha.image.height">48</prop>
- <prop key="kaptcha.session.key">code</prop>
- <prop key="kaptcha.textproducer.char.string">123456789</prop>
- <prop key="kaptcha.textproducer.char.length">4</prop>
- <prop key="kaptcha.textproducer.char.space">6</prop>
- <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
- <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
- </props>
- </constructor-arg>
- </bean>
- </property>
- </bean>
1.2 Controller 实现
- package com.vopzoon.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 {
- @Autowired
- private Producer captchaProducer = null;
- @RequestMapping
- public 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 jpeg
- response.setContentType("image/jpeg");
- // create the text for the image
- String capText = captchaProducer.createText();
- // store the text in the session
- session.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. 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="#" onclick="changeCode()">看不清?换一张</a>
- </div>
- </body>
- </html>
PS:需要自行引入kaptcha.jar;
二:servlet实现方式
2.1 web.xml 配置:
- <!--Kaptcha 验证码 -->
- <servlet>
- <!-- 生成验证码和刷新的Servlet -->
- <servlet-name>kaptcha</servlet-name>
- <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
- <init-param>
- <!-- 验证码图片的边框 yes和no -->
- <param-name>kaptcha.border</param-name>
- <param-value>yes</param-value>
- </init-param>
- <init-param>
- <!-- 验证码图片的边框的颜色 -->
- <param-name>kaptcha.border.color</param-name>
- <param-value>105,179,90</param-value>
- </init-param>
- <init-param>
- <!-- 验证码的颜色 -->
- <param-name>kaptcha.textproducer.font.color</param-name>
- <param-value>red</param-value>
- </init-param>
- <init-param>
- <!-- 整个验证码在图片中的宽度 -->
- <param-name>kaptcha.image.width</param-name>
- <param-value>250</param-value>
- </init-param>
- <init-param>
- <!-- 整个验证码在图片中的高度 -->
- <param-name>kaptcha.image.height</param-name>
- <param-value>90</param-value>
- </init-param>
- <init-param>
- <!-- 验证码在图片中的大小 -->
- <param-name>kaptcha.textproducer.font.size</param-name>
- <param-value>70</param-value>
- </init-param>
- <init-param>
- <!-- 获取验证码的名字SESSION -->
- <param-name>kaptcha.session.key</param-name>
- <param-value>code</param-value>
- </init-param>
- <init-param>
- <!-- 显示几个验证码 -->
- <param-name>kaptcha.textproducer.char.length</param-name>
- <param-value>4</param-value>
- </init-param>
- <init-param>
- <!-- 验证码的字体和式样 -->
- <param-name>kaptcha.textproducer.font.names</param-name>
- <param-value>宋体,楷体,微软雅黑</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>kaptcha</servlet-name>
- <url-pattern>/kaptcha/kaptcha.jpg</url-pattern>
- </servlet-mapping>
Spring MVC Captcha 验证码的更多相关文章
- Spring MVC 中使用 Google kaptcha 验证码
验证码是抵抗批量操作和恶意登录最有效的方式之一. 验证码从产生到现在已经衍生出了很多分支.方式.google kaptcha 是一个非常实用的验证码生成类库. 通过灵活的配置生成各种样式的验证码,并将 ...
- spring mvc生成注册验证码
通过Spring MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...
- Spring mvc 中使用 kaptcha 验证码
生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptcha 生成验证码十分简单并且参数可以进行自定义.只需添加jar包配置下就可 ...
- 基于spring mvc的图片验证码实现
本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) publ ...
- Spring MVC 使用kaptcha生成验证码
Spring MVC 使用kaptcha生成验证码 1.下载kaptcha-2.3.2.jar(或直接通过该文章附件下载) http://code.google.com/p/kaptcha/downl ...
- spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 登录
如标题,用spring mvc 4.3.2+mybatis 3.4.1 + mysql 5.7.14 +shiro 开发了一个用于幼儿园的管理系统. 功能模块 包括 账号,角色,权限管理. 幼儿档案管 ...
- Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...
- Spring Mvc和Mybatis的多数据库访问配置过程
Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...
- 基于Spring MVC 实现拦截器
Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...
随机推荐
- js 自调函数
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- vue点击除了某组件本身的其它地方, 隐藏该组件的方法
点击emoji表情标签, 出现标签组件,点击其它地方, 改组件消失的效果; <template> <div class="writeZoon"> <d ...
- IDEA导入Junit jar包,在JavaSE的Module中使用Junit测试
写代码时偶尔想试一下自己的小想法,于是在IDEA中建了一个JavaEE项目.JavaEE项目中只能在main方法中运行代码块,不如单元测试的@Test灵活. 于是在网上找到了Junit的jar包:Do ...
- 51nod1769 Clarke and math 2
题目 实际上就是要求\(f*I^k\). 因为\(I^k\)是一个积性函数,所以我们只需要考虑如何求\(I^k(p^a)\). 把这个东西转化成一个长度为\(k\)的序列,每一位是\(\frac{i_ ...
- 【IO流】FileInputStream FileOutputStream BufferInputStream BufferOutputStream
FileInputStream IO流用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的类都在IO包中. 流按流向分为两种:输入流,输出流. 流按操作类型分为两种 ...
- 使用CSDN-markdown编辑器粘贴代码块时崩溃问题解决
原因:代码段换行符失效,所有代码一行显示 解决方法:使用Chrome浏览器即可解决(使用Microsoft Edge会出现此问题) 效果展示: # _*_ coding:utf-8 _*_ impor ...
- java 如何重写equal 和hashcode方法(最佳实践)
先看完理解这篇:Java hashCode() 和 equals()的若干问题解答 实现高质量的equals方法的诀窍包括 使用==操作符检查“参数是否为这个对象的引用”: 使用instanceof操 ...
- SharePoint自己定义程序页面部署 不用重新启动IIS
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/dz45693/article/details/30840255 SharePoint的部署方式默认是 ...
- js日期格式验证
js日期格式验证 <input type="text" maxLength='10' onkeyup='checkDate(this.value,jQuery(this)); ...
- 使用form表单提交请求如何获取后台返回的数据?
问题描述 一般的form表单提交是单向的:只能给服务器发送数据,但是无法获取服务器返回的数据,也就是无法读取HTTP应答包. 想要真正的半双工通讯一般需要使用Ajax, 但是Ajax对文件传输也很麻烦 ...