java 实现登录验证码 (kaptcha 验证码组件)

验证码的作用:

1、防止广告机注册和发帖、评论。
2、防止暴力破解密码,特别是有管理员权限的密码。

在这里介绍一种非常实用的验证码生成工具:kaptcha

这个工具,可以生成各种样式的验证码,因为它是可配置的。

而 kaptcha工作的原理,是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中,直接从session中获取这张验证码图片,而不会占用实际内存。

使用 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
kaptcha.session.key           session中存放验证码的key键

所实用的框架:SSM

所需的验证码的 jar 包:kaptcha-2.3.2.jar,可以到官网上下载:http://code.google.com/p/kaptcha/

applicationContext.xml 需要配置验证码的相关属性:

 1 <!-- 验证码 -->
 2     <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
 3         <property name="config">
 4             <bean class="com.google.code.kaptcha.util.Config">
 5                 <constructor-arg>
 6                     <props>
 7                         <!--这里的颜色只支持标准色和rgb颜色,不可使用十六进制的颜色-->
 8                         <!-- 是否有边框 -->
 9                         <prop key="kaptcha.border">no</prop>
10                         <!-- 验证码文本字符颜色 -->
11                         <prop key="kaptcha.textproducer.font.color">black</prop>
12                         <!-- 验证码图片宽度 -->
13                         <prop key="kaptcha.image.width">92</prop>
14                         <!-- 验证码图片高度 -->
15                         <prop key="kaptcha.image.height">36</prop>
16                         <!-- 验证码文本字符大小 -->
17                         <prop key="kaptcha.textproducer.font.size">24</prop>
18                         <!-- session中存放验证码的key键 -->
19                         <prop key="kaptcha.session.key">code</prop>
20                         <!-- 验证码噪点颜色 -->
21                         <prop key="kaptcha.noise.color">white</prop>
22                         <!-- 验证码文本字符间距 -->
23                         <prop key="kaptcha.textproducer.char.space">3</prop>
24                         <!-- 验证码样式引擎 -->
25                         <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
26                         <!-- 验证码文本字符长度 -->
27                         <prop key="kaptcha.textproducer.char.length">4</prop>
28                         <!-- 验证码文本字体样式 -->
29                         <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
30                     </props>
31                 </constructor-arg>
32             </bean>
33         </property>
34     </bean>

生成二维码图片的控制类:CaptchaController.java

 1 /**
 2      * com.krry.web
 3      * 方法名:生成二维码控制类
 4      * 创建人:krry
 5      * @param request
 6      * @param response
 7      * @return
 8      * @throws Exception
 9      * 返回类型:ModelAndView
10      * @exception
11      * @since  1.0.0
12     */
13     @RequestMapping("/code")
14     public ModelAndView getKaptchaImage(HttpServletRequest request,HttpServletResponse response) throws Exception {
15         HttpSession session = request.getSession();
16         //获取验证码
17         //    String code = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
18         //    String code = (String) session.getAttribute("Kaptcha_Code");
19         //清除浏览器的缓存
20         response.setDateHeader("Expires", 0);
21         // Set standard HTTP/1.1 no-cache headers.
22         response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
23         // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
24         response.addHeader("Cache-Control", "post-check=0, pre-check=0");
25         // Set standard HTTP/1.0 no-cache header.
26         response.setHeader("Pragma", "no-cache");
27         // return a jpeg
28         response.setContentType("image/jpeg");
29         //浏览器记忆功能-----当前过浏览器和服务器交互成功以后下载的图片和资源会进行缓存一次。下次刷新的时候就不会在到服务器去下载。
30         // 获取KAPTCHA验证的随机文本
31         String capText = captchaProducer.createText();
32         // 将生成好的图片放入会话中
33         session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
34         // create the image with the text
35         BufferedImage bi = captchaProducer.createImage(capText);
36         ServletOutputStream out = response.getOutputStream();
37         // write the data out
38         ImageIO.write(bi, "jpg", out);
39         try {
40             out.flush();
41         } finally {
42             out.close();//关闭
43         }
44         return null;
45     }

前台调用:

1 <input type=‘text‘ placeholder=‘请输入验证码...‘ maxlength=‘4‘ autocomplete=‘off‘ class=‘inp kr_code‘ id=‘code‘/>
2 <img src=‘"+basePath+"/kaptcha/code.do‘ class=‘yanz_img‘ onclick=‘changeyanz($(this));‘>

js方法:

点击验证码图片换验证码时,<img> 的 onclick 里面做的就是改变 <img> 标签的 src 属性。

所以要给 url 带一个随机数,这样每次点击验证码图片时,都会由于 src 改变而重新请求 jsp

1 function changeyanz(obj){
2     obj.attr("src",basePath+"/kaptcha/code.do?d="+new Date().getTime());
3 }

原文地址:https://www.cnblogs.com/ainyi/p/8571029.html

时间: 2024-08-28 23:25:58

java 实现登录验证码 (kaptcha 验证码组件)的相关文章

SpringMVC中使用Kaptcha验证码组件生成比较安全的验证码

一 简介 Kaptcha是一个基于SimpleCaptcha的验证码开源项目,在我们的项目中使用Kaptcha组件可以快速生成比较安全的验证码.同时Kaptcha还提供了许多的参数可以让我们自定义生成的验证码样式 jar包的官网下载地址:https://code.google.com/archive/p/kaptcha/downloads 当然,为了照顾一些翻不了墙的同学,我也在51cto上上传了一份Kaptcha最新的的jar包(kaptcha-2.3.2),传送门:http://down.5

kaptcha 验证码组件使用

kaptcha 验证码组件使用简介 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中. 使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗

Java实现验证码制作之一Kaptcha验证码

Kaptcha验证码 是google提供的验证码插件,使用起来相对简单,设置的干扰线以及字体扭曲不易让其他人读取破解. 这里我们需要 导入一个 kaptcha-2.3.jar  下载地址:http://pan.baidu.com/s/1dDzw7Bj jar包中有个 KaptchaServlet 的servlet,每次访问都会保存在session 作用域当中 默认保存的名称是 KAPTCHA_SESSION_KEY 你也可以自己设定 保存过名称 看xml中的注释的   “session中存放验证

google kaptcha 验证码组件使用简介

kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中. 使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以自

Java实现登录验证码

登录验证码 Servlet /* 从请求中获取数据,获取验证码的session的值转为String类型,?????? 销毁,防止返回后验证码不刷新,重新验证成功?????? 判断验证码是否相同(忽略大小写)?? 相同:创建user对象调用service层的方法验证返回结果是否为空?????? ?为空:创建session:储存错误信息,转发,登录页面显示登录名或密码错误???? ?不为空:创建session:储存用户名,转发,到登录成功页面?????? 不相同:创建session:储存错误信息,登

单点登录CAS使用记(四):为登录页面加上验证码

CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步:导入验证码生成工具包及生成验证码配置 pom.xml中加入如下配置 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> &l

springboot集成kaptcha验证码

在pom.xml引入依赖 <!-- 验证码 --> <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码

序: 给Shiro加入验证码,有多种方式,当然你也可以通过继承修改FormAuthenticationFilter类,通过Shiro去验证验证码.具体实现请百度: 应用Shiro到Web Application(验证码实现) 而今天我要说的,既然使用的SpringMVC,为什么不直接在Controller中就处理验证码验证,让事情变的更简单一点呢? 一.新建ValidateCode.java验证码工具类 package org.shiro.demo.util; import java.util.

【试水CAS-4.0.3】第03节_CAS服务端登录页添加验证码

/** * @see ------------------------------------------------------------------------------------------------------------------------ * @see CAS登录页添加验证码 * @see 0.这年头验证码一般用来防止帐号被暴力破解,如果我们的系统是走专线的,也就是说放在内网,那完全没必要搞验证码 * @see 1.由于CAS使用了Spring Web Flow框架,所以

用户登录注册之验证码技术实现

对于一些恶意强暴破解密码的行为(即通过硬性尝试用户名密码进行破解),可以采用验证码对其进行抵御,对于一些程序可以识别验证码,则需要对验证码形式进行多样化设计. 用户登录时设置验证码代码实现: 页面 <script type="text/javascript"> function _change() { var imgEle = document.getElementById("img"); imgEle.src = "${pageContext