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都是提供有拦截器的, ...
随机推荐
- Canvas入门03-绘制弧线和圆
绘制弧线的API: context.arc(centerx:number, centery: number, radius: number, startAngle: number, endAngle: ...
- 杭州集训Day4
别问我为什么没有前三天,有时间再补~ 60+60+50=170. T1 . 坐等 memset0 ( 1s 256MB )( 原题:洛谷CF1151E Number of Components ) 树 ...
- 【转】centos7安装
转自:https://blog.csdn.net/qq_42570879/article/details/82853708 1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:htt ...
- 小油2018 win7旗舰版64位GHOST版的,安装telnet客户端时,提示:出现错误。并非所有的功能被成功更改。
win7旗舰版64位GHOST版的,安装telnet客户端时,提示:出现错误.并非所有的功能被成功更改. 从安装成功的电脑上拷贝ghost版本缺少的文件,然后再安装telnet客户端,我已打包 链接: ...
- JS事件绑定的两种形式
第一种: obj.on*=function(){} var btn=document.getElementById('myBtn'); btn.onclick=function(){ alert(1) ...
- 2019 Multi-University Training Contest 2 - 1011 - Keen On Everything But Triangle - 线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样 ...
- 使用ajax发送文件的三种方式及预览图片的方法,上传按钮美化
后端代码 def upload(request): if request.method == "GET": return render(request,'upload.html') ...
- k3 cloud提示超出产品激活有效期
k3 cloud提示超出产品激活有效期,请联系系统管理员登录管理中心进行产品激活(激活路径:许可中心-许可管理-产品激活) 首先进入管理中心:一次点击许可中心-产品激活 复制激活串号并点击金蝶正版验证 ...
- 自动布局(storyboard,code)
xcode 6使用storyboard 进行自动布局,迷惑的问题主要由: 1,classsize 到底是一个什么东东? 2,classSize 和 layout 有什么区别? 3, 如何使用stor ...
- c++ Socket客户端和服务端示例版本三(多线程版本)
客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/soc ...