博客地址:https://ainyi.com/70

验证码的作用:

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 需要配置验证码的相关属性:

 <!-- 验证码 -->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<!--这里的颜色只支持标准色和rgb颜色,不可使用十六进制的颜色-->
<!-- 是否有边框 -->
<prop key="kaptcha.border">no</prop>
<!-- 验证码文本字符颜色 -->
<prop key="kaptcha.textproducer.font.color">black</prop>
<!-- 验证码图片宽度 -->
<prop key="kaptcha.image.width">92</prop>
<!-- 验证码图片高度 -->
<prop key="kaptcha.image.height">36</prop>
<!-- 验证码文本字符大小 -->
<prop key="kaptcha.textproducer.font.size">24</prop>
<!-- session中存放验证码的key键 -->
<prop key="kaptcha.session.key">code</prop>
<!-- 验证码噪点颜色 -->
<prop key="kaptcha.noise.color">white</prop>
<!-- 验证码文本字符间距 -->
<prop key="kaptcha.textproducer.char.space">3</prop>
<!-- 验证码样式引擎 -->
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
<!-- 验证码文本字符长度 -->
<prop key="kaptcha.textproducer.char.length">4</prop>
<!-- 验证码文本字体样式 -->
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>

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

 /**
* com.krry.web
* 方法名:生成二维码控制类
* 创建人:krry
* @param request
* @param response
* @return
* @throws Exception
* 返回类型:ModelAndView
* @exception
* @since 1.0.0
*/
@RequestMapping("/code")
public ModelAndView getKaptchaImage(HttpServletRequest request,HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
//获取验证码
// String code = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
// String code = (String) session.getAttribute("Kaptcha_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");
//浏览器记忆功能-----当前过浏览器和服务器交互成功以后下载的图片和资源会进行缓存一次。下次刷新的时候就不会在到服务器去下载。
// 获取KAPTCHA验证的随机文本
String capText = captchaProducer.createText();
// 将生成好的图片放入会话中
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;
}

前台调用:

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

js方法:

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

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

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

登录时对验证码的验证:LoginController.java

         //获取用户传递进来的验证码
String code = request.getParameter("code");
if(TmStringUtils.isNotEmpty(code)){
//获取session中的验证码
String sessionCode = (String)request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
//如果输入的验证码和会话的验证码不一致的,提示用户输入有误
if(TmStringUtils.isNotEmpty(sessionCode) && !code.equalsIgnoreCase(sessionCode)){
return "error_code";
}
}

以上配置的效果图:

博客地址:https://ainyi.com/70

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

  1. kaptcha 验证码组件使用

    kaptcha 验证码组件使用简介   kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.co ...

  2. kaptcha验证码组件使用简介

    Kaptcha是一个基于SimpleCaptcha的验证码开源项目. 官网地址:http://code.google.com/p/kaptcha/ kaptcha的使用比较方便,只需添加jar包依赖之 ...

  3. java实现登录的验证码和猜数字游戏_图形化界面

    实验任务四 1,出现设计思想 (1)先定义文本框.密码框和验证码框的组件 (2)定义面板和按钮的个数 (3)定义公有的虚构方法,通过对象实例化来调用 (4)利用Random类来实现生成0-9的随机数 ...

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

    Kaptcha验证码 是google提供的验证码插件,使用起来相对简单,设置的干扰线以及字体扭曲不易让其他人读取破解. 这里我们需要 导入一个 kaptcha-2.3.jar  下载地址:http:/ ...

  5. google kaptcha 验证码组件使用简介

    kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K ...

  6. 使用kaptcha验证码组件操作演示

    1.创建一个Maven项目 2.在pom.xml中引入相关依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  7. Java Web项目使用图形验证码 — Kaptcha

    一.验证码介绍 生成的主要方式: 1.使用Java原生的方式,其中包含了Servlet.AWT.ImageIO的使用: 2.使用开源库,例如Jcaptcha.Kaptcha...: (各图形验证码开源 ...

  8. Java实现登录验证码

    登录验证码 Servlet /* 从请求中获取数据,获取验证码的session的值转为String类型,       销毁,防止返回后验证码不刷新,重新验证成功       判断验证码是否相同(忽略大 ...

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

    CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步: ...

随机推荐

  1. Ubuntu下利用Apache转发模块实现反向代理

    Apache的反向代理主要利用转发模块,proxy和proxy_http 先配置 Apache 支持proxy 和 proxy_http 在Ubuntu系统下,Apache的配置文件在目录/etc/a ...

  2. 通过修改注册表设置windows环境变量

    开发环境搭建每次都要设置很多环境变量, 一般是通过  [菜单]->[计算机]->[属性]->[高级设置]->[环境变量]进行设置,重装系统后,每次都要设置很多环境变量,很麻烦. ...

  3. Thinkpad USB 经典键盘使用体验

    先上图,这就是一个键盘,不是笔记本电脑. 优点: 1. 键盘完胜各类巧克力式键盘. 2. 小红点和老thinkpad 上的小红点一样好用. 3. ESC 和Delete 放大后,盲摸很方便. 缺点: ...

  4. 市面上有没有靠谱的PM2.5检测仪?如何自己动手制作PM2.5检测仪

     市面上能买到的11中常见的pm2.5检测仪 网上大佬实测并不是很准,我这里没测过(全买下来有点贵,贫穷限制了我的想象力) 这些检测仪多数是复合式.多功能的空气质量检测仪.具体就不一一介绍了.这篇文章 ...

  5. Shell 编程入门

    首先创建一个文件: 在终端中输入如下命令: vi helloworld.sh 然后按i进行命令编写 下面这句话是必须写的 #!/bin/sh这句话是必须写的 #!/bin/sh a="hel ...

  6. js中boolean类型的理解

    <html> <head> <script type="text/javascript"> var x="12"; aler ...

  7. JSP的内置对象以及作用域。

    最近在面试,一些基础的问题总是会被问到,虽然是基础,但是有些东西在工作中用的少,所以就有些记不清了,在面试的时候更因为紧张很容易造成原先知道的知识也会突然忘了的情况发生.所以在重新组织一下jsp的内置 ...

  8. SSH服务端配置、优化加速、安全防护

    CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD.由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机 ...

  9. hive:框架理解

    1. 什么是hive  •Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. •本质是将HQL转换为MapReduce程序  2. 为什么 ...

  10. javascript-深入理解&&和||

    先从两个问题看起: 第一个问题 为什么 a && b 返回的是true,b && a 返回的是6 var user = 6; var both = true; cons ...