web页面 验证码 生成

kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中。

使用kaptcha可以方便的配置:

  • 验证码的字体
  • 验证码字体的大小
  • 验证码字体的字体颜色
  • 验证码内容的范围(数字,字母,中文汉字!)
  • 验证码图片的大小,边框,边框粗细,边框颜色
  • 验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线)
  • 验证码的样式(鱼眼样式、3D、普通模糊……当然也可以继承com.google.code.kaptcha.GimpyEngine自定义样式)

……

详细信息请看下面的web.xml文件

下面介绍一下用法:

1.首先去官网下载jar:http://code.google.com/p/kaptcha/

2.建立一个web项目,导入kaptcha-2.3.jar到环境变量中。

3.配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet><servlet-name>Kaptcha</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class><!--For a complete list of Init Parameters, please see:http://code.google.com/p/kaptcha/wiki/ConfigParameters--><init-param><param-name>kaptcha.border</param-name><param-value>no</param-value></init-param><init-param><param-name>kaptcha.textproducer.font.color</param-name><param-value>black</param-value></init-param><init-param><param-name>kaptcha.textproducer.char.space</param-name><param-value>5</param-value></init-param></servlet><servlet-mapping><servlet-name>Kaptcha</servlet-name><url-pattern>/Kaptcha.jpg</url-pattern></servlet-mapping><welcome-file-list><welcome-file>KaptchaExample.jsp</welcome-file></welcome-file-list>
</web-app>

4.jsp页面

KaptchaExample.jsp:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><%@ page language="java" contentType="text/html; charset=UTF-8" %><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Kaptcha Example</title></head><script type="text/javascript">  $(function() {  $('#kaptchaImage').click(function() {$(this).attr('src','kaptcha.jpg?' + Math.floor(Math.random() * 100));});  });
</script>  <body>Enter in the <a href="http://code.google.com/p/kaptcha/">Kaptcha</a> to see if it matches what is stored in the session attributes.<table><tr><td><img src="Kaptcha.jpg" id="kaptchaImage" ></td><td valign="top"><form method="POST"><br>sec code:<input type="text" name="kaptchafield"><br /><input type="submit" name="submit"></form></td></tr></table>    <br /><br /><br /><br /><%String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);String parm = (String) request.getParameter("kaptchafield");out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");if (c != null && parm != null) {if (c.equals(parm)) {out.println("<b>true</b>");} else {out.println("<b>false</b>");}}%></body>
</html>

上面的配置在普通jsp环境下面是有效的,如果在spring mvc环境下,则取不到session值,对于sping mvc环境验证码配置如下:

1.不用在web.xml进行相关配置,在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><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">250</prop><prop key="kaptcha.textproducer.font.size">90</prop><prop key="kaptcha.image.height">90</prop><prop key="kaptcha.session.key">code</prop><prop key="kaptcha.textproducer.char.length">4</prop><prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop></props></constructor-arg></bean></property></bean>

2.新建生成图片控制类

package com.google.code.kaptcha;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Constants;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/")
public class CaptchaImageCreateController {  private Producer captchaProducer = null;  @Autowired  public void setCaptchaProducer(Producer captchaProducer) {  this.captchaProducer = captchaProducer;  }  @RequestMapping("/captcha-image")  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {  // Set to expire far in the past.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
        request.getSession().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.前台调用方式

<div class="chknumber">  <label>验证码:          <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />               </label>  <img src="/ClinicCountManager/captcha-image.do" width="55" height="20" id="kaptchaImage"  style="margin-bottom: -3px"/>   <script type="text/javascript">      $(function(){           $('#kaptchaImage').click(function () {//生成验证码
             $(this).hide().attr('src', '/ClinicCountManager/captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); })      });   </script>   </div>

4.取验证码的方式

String code = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);  

啦啦啦

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
1.导入kaptcha9.jar
2.<bean id="captcha" class="com.google.code.kaptcha.servlet.KaptchaExtend"><constructor-arg><props>  <!-- 是否有边框 边框颜色 边框粗细 --><prop key="kaptcha.border">yes</prop>  <prop key="kaptcha.border.color">105,179,90</prop>  <prop key="kaptcha.border.thickness">20</prop><prop key="kaptcha.textproducer.font.color">black</prop>  <prop key="kaptcha.image.width">200</prop>  <prop key="kaptcha.image.height">50</prop>  <prop key="kaptcha.textproducer.font.size">40</prop> <!-- 验证码在session中存储时的key:session.setAttribute("xxx",xxxx); --><prop key="kaptcha.session.key">code</prop>  <prop key="kaptcha.textproducer.char.length">4</prop>  <prop key="kaptcha.textproducer.font.names">Arial,Courier</prop> <prop key="kaptcha.background.clear.from">black</prop> <prop key="kaptcha.background.clear.to">255,0,0</prop> </props>  </constructor-arg></bean>
3.      @...public class XXController{//在Controller中注入验证码生成器
        @Autowiredprivate KaptchaExtend ke;@RequestMapping("/kap2")public String kaptcha2(HttpServletRequest req,HttpServletResponse resp,HttpSession s){try {ke.captcha(req, resp);//生成验证码,并写出验证码图片System.out.println("code:"+s.getAttribute("code"));}return null;}}
*需要jdk7

啦啦啦

web页面 验证码 生成相关推荐

  1. [ 浅谈web网站验证码生成方案之一 ]

    1.前言 web系统注册登录界面存在验证码验证信息已不再是新鲜事,现在的验证码生成策略有很多种,以往有单纯数字.单纯字母.字母数字组合.现在出现一些中文验证和图片验证. 要想了解中文验证和图片验证是如 ...

  2. python excel web_使用python在WEB页面上生成EXCEL文件

    近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比较可行的实现方案,下面以web.py为例,把相关代码贴出来供大家参考: 首先需要下载生成EXCEL的模块,推荐使 ...

  3. WEB页面验证码自动识别并填充

    2019独角兽企业重金招聘Python工程师标准>>> 现在许多页面在登陆的时候都需要根据验证码图片输入验证码,你是否经常碰到类似的想法:我能否自动识别该验证码并自动填充到对应的验证 ...

  4. 新一代纯前端控件集 WijmoJS 2018V2发布,提供 Web 设计器,可动态设计页面并生成代码...

    概述 作为一款纯前端控件集,WijmoJS 秉承"快如闪电,触控优先"的设计理念,在提供优质服务和产品的同时,专注于企业应用开发,不断优化产品架构,与时俱进.除在全球率先支持 An ...

  5. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  6. 【在web项目jsp页面自动生成二维码功能】

    在web项目jsp页面自动生成二维码功能 原文: http://www.cnblogs.com/gczmn/. https://www.jq22.com/jquery-info294/. 先将下面的文 ...

  7. Web页面动态验证码

    结果如下: 如果输入错误,鼠标在输入框之外点击则 输入正确则不会显示出 点击提交跳转到成功的页面,注意此时搜索栏已经变化 算法实现 动态验证码实现首先得有一个算法. 定义一个数组用来存放生成的验证码 ...

  8. 利用POI生成EXCEL报表(通过web页面导出后台数据)

    很多时候需要将数据利用浏览器进行导出,这个时候我们就可以采用Apache的POI进行实现通过web页面实现Excel导出后台数据,并且以.xlsx的形式下载到本地,也就是excel表格形式. 首先先下 ...

  9. Django 20购物商城项目(注册、登录页面:生成动态验证码)

    dDjango 20购物商城项目 1.安装pillow 2.在注册页面加入验证码 2.1.register.html (增加内容) 2.2.register.js(增加内容) 2.2.路由.视图(增加 ...

最新文章

  1. python 网页自动处理_推荐一款 10 行 Python 代码实现网页自动化工具
  2. 头像裁剪_课堂裁剪|19级油画班油画头像写生作品
  3. 每天自动备份网站数据,发现问题一键恢复 ——阿里云虚拟主机推出网站数据自动备份功能...
  4. 软件工程导论 09章面向对象方法学
  5. 学习笔记88—spyder生成的图单独窗口显示
  6. 交流信号叠加直流偏置_T型偏置器与隔直器,二者应用之对比
  7. 免费2款标注工具实操(内含下载链接)
  8. webqq协议分析之~~~~登陆
  9. 如何在WordPress中使用SEO写作助手来改善SEO
  10. 基于JavaWeb的小说阅读网站设计与实现 毕业论文+答辩PPT+项目源码及数据库文件
  11. python 公众号引流_公众号粉丝从0到1000的引流思路
  12. 为知笔记怎么导入文件
  13. IP-guard苹果加密软件苹果系统加密Mac文档加密软件
  14. java的标示符规则与名称命名规范
  15. 关于pom.xml一直提示Could not transfer artifact(无法搬运)+无法解析maven依赖(更新)的问题,我在学习springboot的过程中遇到的一些问题(持续更新中)
  16. 【仅供娱乐】计算机算命之Python通天六十四卦
  17. MATLAB视频截取和缩放
  18. java quartz配置_java quartz简单使用
  19. 科东隔离升级到5.04
  20. 自己焊接制作的蓝鸟STM32四轴飞行器

热门文章

  1. jenkins运行日志时间与linux,持续集成之Jenkins结合脚本实现代码自动化部署及一键回滚至上一版本...
  2. 系统优化怎么做-数据库优化
  3. Spring中Bean的生命周期是怎样的
  4. 华为鸿蒙产业链股票,华为P40或用鸿蒙 华为产业链概念股一览
  5. c语言中输入10,10 is greater than 0,2013练习题__Student
  6. linux 统计根目录下的文件日期和出现的频率
  7. php ole word,介绍 · PHPword新版开发指南 · 看云
  8. 面试java回答优缺点_阿里Java开发面经分享,面试题(附回答)
  9. Programming Computer Vision with Python (学习笔记十)
  10. Dubbo 源码分析 - 集群容错之Directory