精华内容
下载资源
问答
  • 有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中。使用...

    效果图:


    官方地址:https://code.google.com/p/kaptcha/w/list

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

    使用kaptcha可以方便的配置:

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

    ……

    下面介绍一下用法:

    实现方式有多种,下面介绍Spring注入方式和Servlet方式

    Servlet方式

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

    2.配置web.xml增加servlet

    [html] view plain copy
    1. <servlet>    
    2.         <servlet-name>Kaptcha</servlet-name>    
    3.         <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>    
    4. </servlet>    
    5. <servlet-mapping>    
    6.         <servlet-name>Kaptcha</servlet-name>    
    7.         <url-pattern>/kaptcha.jpg</url-pattern>    
    8. </servlet-mapping>    
    3、在jsp页面中
    [html] view plain copy
    1. <form action="submit.action" method="post">    
    2.     <img src="kaptcha.jpg" id="kaptchaImage" /> <input type="text"    
    3.         name="kaptcha" value="" /> <input type="submit" name="submit"    
    4.         value="submit" />    
    5. </form>    
    其中src="kaptcha.jpg"会被定位到servlet上

    4、KaptchaServlet会把验证码设置到session中,可以如下方式获取

    [html] view plain copy
    1. String kaptchaExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);  
    5、如果是struts2的action,可以如下方式获取
    [html] view plain copy
    1. String kaptchaExpected = (String)ActionContext.getContext().getSession().get(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);    
    6、如果想设置点击图片更换验证码,可以加上如下js,需要jquery
    [html] view plain copy
    1. <script type="text/javascript">    
    2.     $(function(){    
    3.         $('#kaptchaImage').click(function () { $(this).attr('src', '/kaptcha.jpg?' + Math.floor(Math.random()*100) ); })    
    4.     });    
    5. </script>    
    7、或者来点fade效果
    [html] view plain copy
    1. <script type="text/javascript">    
    2.     $(function() {    
    3.         $('#kaptchaImage').click(    
    4.                 function() {    
    5.                     $(this).hide().attr('src',    
    6.                             'kaptcha.jpg?' + Math.floor(Math.random() * 100)).fadeIn();    
    7.                 });    
    8.     });    
    9. </script>    
    8、验证码图片还有很多参数设置

    设置方法,在web.xml的servlet中

    [html] view plain copy
    1. <init-param>    
    2.     <param-name>kaptcha.border</param-name>    
    3.     <param-value>no</param-value>    
    4. </init-param>    
    Constant描述默认值
    kaptcha.border图片边框,合法值:yes , noyes
    kaptcha.border.color边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue.black
    kaptcha.border.thickness边框厚度,合法值:>01
    kaptcha.image.width图片宽200
    kaptcha.image.height图片高50
    kaptcha.producer.impl图片实现类com.google.code.kaptcha.impl.DefaultKaptcha
    kaptcha.textproducer.impl文本实现类com.google.code.kaptcha.text.impl.DefaultTextCreator
    kaptcha.textproducer.char.string文本集合,验证码值从此集合中获取abcde2345678gfynmnpwx
    kaptcha.textproducer.char.length验证码长度5
    kaptcha.textproducer.font.names字体Arial, Courier
    kaptcha.textproducer.font.size字体大小40px.
    kaptcha.textproducer.font.color字体颜色,合法值: r,g,b  或者 white,black,blue.black
    kaptcha.textproducer.char.space文字间隔2
    kaptcha.noise.impl干扰实现类com.google.code.kaptcha.impl.DefaultNoise
    kaptcha.noise.color干扰颜色,合法值: r,g,b 或者 white,black,blue.black
    kaptcha.obscurificator.impl图片样式:
    水纹com.google.code.kaptcha.impl.WaterRipple
    鱼眼com.google.code.kaptcha.impl.FishEyeGimpy
    阴影com.google.code.kaptcha.impl.ShadowGimpy
    com.google.code.kaptcha.impl.WaterRipple
    kaptcha.background.impl背景实现类com.google.code.kaptcha.impl.DefaultBackground
    kaptcha.background.clear.from背景颜色渐变,开始颜色light grey
    kaptcha.background.clear.to背景颜色渐变,结束颜色white
    kaptcha.word.impl文字渲染器com.google.code.kaptcha.text.impl.DefaultWordRenderer
    kaptcha.session.keysession keyKAPTCHA_SESSION_KEY
    kaptcha.session.datesession dateKAPTCHA_SESSION_DATE

    9、

    水纹效果


    鱼眼效果


    阴影效果

    以下代码是我在SpringMVC中的代码

    [java] view plain copy
    1. package com.rapido.controller;  
    2.   
    3. import java.awt.image.BufferedImage;  
    4.   
    5. import javax.imageio.ImageIO;  
    6. import javax.servlet.ServletOutputStream;  
    7. import javax.servlet.http.HttpServletRequest;  
    8. import javax.servlet.http.HttpServletResponse;  
    9.   
    10. import org.springframework.beans.factory.annotation.Autowired;  
    11. import org.springframework.stereotype.Controller;  
    12. import org.springframework.web.bind.annotation.RequestMapping;  
    13. import org.springframework.web.servlet.ModelAndView;  
    14.   
    15. import com.google.code.kaptcha.Constants;  
    16. import com.google.code.kaptcha.Producer;  
    17.   
    18. /** 
    19.  * 随机验证码控制层 
    20.  *  
    21.  * 使用kaptcha-2.3.2.jar支持 
    22.  *  
    23.  * Captcha: Completely Automated Public Test to tell Computers and Humans 
    24.  * Apart(全自动区分计算机和人类的图灵测试) 
    25.  *  
    26.  * @author X-rapido 
    27.  *  
    28.  */  
    29. @Controller  
    30. @RequestMapping("/Captcha")  
    31. public class CaptchaRandomCodeController {  
    32.     private Producer captchaProducer = null;  
    33.   
    34.     @Autowired  
    35.     public void setCaptchaProducer(Producer captchaProducer) {  
    36.         this.captchaProducer = captchaProducer;  
    37.     }  
    38.   
    39.     @RequestMapping("/captcha-image")  
    40.     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {  
    41.         response.setDateHeader("Expires"0);// 禁止服务器端缓存  
    42.         // 设置标准的 HTTP/1.1 no-cache headers.  
    43.         response.setHeader("Cache-Control""no-store, no-cache, must-revalidate");  
    44.         // 设置IE扩展 HTTP/1.1 no-cache headers (use addHeader).  
    45.         response.addHeader("Cache-Control""post-check=0, pre-check=0");  
    46.         response.setHeader("Pragma""no-cache");// 设置标准 HTTP/1.0 不缓存图片  
    47.         response.setContentType("image/jpeg");// 返回一个 jpeg 图片,默认是text/html(输出文档的MIMI类型)  
    48.         String capText = captchaProducer.createText();// 为图片创建文本  
    49.           
    50.         // 将文本保存在session中,这里就使用包中的静态变量吧  
    51.         request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
    52.           
    53.         BufferedImage bi = captchaProducer.createImage(capText); // 创建带有文本的图片  
    54.         ServletOutputStream out = response.getOutputStream();  
    55.         // 图片数据输出  
    56.         ImageIO.write(bi, "jpg", out);  
    57.         try {  
    58.             out.flush();  
    59.         } finally {  
    60.             out.close();  
    61.         }  
    62.   
    63.         System.out.println("Session 验证码是:" + request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY));  
    64.         return null;  
    65.     }  
    66. }  

    applicationContext.xml

    [html] view plain copy
    1. <!-- 验证码配置(也可以做web.xml的Servlet中配置),对应CaptchaRandomCodeController管理生成 -->  
    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.                     <prop key="kaptcha.border">yes</prop>  
    8.                     <prop key="kaptcha.border.color">105,179,90</prop>  
    9.                     <prop key="kaptcha.image.width">160</prop>  
    10.                     <prop key="kaptcha.image.height">50</prop>  
    11.                     <prop key="kaptcha.session.key">code</prop>  
    12.                     <prop key="kaptcha.textproducer.font.color">red</prop>  
    13.                     <prop key="kaptcha.textproducer.font.size">35</prop>  
    14.                     <prop key="kaptcha.textproducer.char.space">3</prop>  
    15.                     <prop key="kaptcha.textproducer.char.length">5</prop>  
    16.                     <!-- 配置中文 <prop key="kaptcha.textproducer.impl">com.google.code.kaptcha.text.impl.ChineseTextProducer</prop> -->  
    17.                     <prop key="kaptcha.textproducer.font.names">彩云,宋体,楷体,微软雅黑</prop>  
    18.                 </props>  
    19.             </constructor-arg>  
    20.         </bean>  
    21.     </property>  
    22. </bean>  


    JSP

    [javascript] view plain copy
    1. <script type="text/javascript">  
    2.     $(function(){  
    3.         // 验证码渐变效果切换  
    4.         $('#kaptchaImage').click(  
    5.            function() {  
    6.                $(this).hide().attr('src','<%=basePath%>Captcha/captcha-image.do?'+ Math.floor(Math.random() * 100)).fadeIn();  
    7.             }  
    8.         );  
    9.     });  
    10. </script>  
    [html] view plain copy
    1. <c:if test="${sessionScope.loginSum >= 3 }">  
    2.     <tr>  
    3.         <td align="right">验证码: <img src="<%=basePath%>Captcha/captcha-image.do" height="25px" width="80px" id="kaptchaImage" /></td>  
    4.         <td><input type="text" name="kaptchaCode" id="kaptchaCode" value="" /></td>  
    5.     </tr>  
    6. </c:if>  

    验证码不但可以使用图形还可以使用语音,比如SimpleCaptcha就可以,kaptcha扩展了SimpleCaptcha,等等都可以使用语音验证码,官方中有提供此类的demo可以下载部署在tomcat上使用

    使用Java生成验证码的库有很多,比如以下列表中的举例

    Java验证码生成库 JCaptcha

    Struts验证码插件 JCaptcha4Struts2

    Java图形验证码 SimpleCaptcha

    Java验证码 kaptcha

    Java验证码 patchca

    Java验证码生成库 imageRandom

    Java验证码库 iCaptcha

    Java图片验证库SkewPassImage

    Java 验证码 Cage

    展开全文
  • 以前的登陆验证码

    2020-06-29 21:54:20
    以前用的登录验证码代码 <table width="600" height="200" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td background="images/Login_bg.jpg"> <table width="40%" ...

    以前用的登录验证码代码

    <table width="600" height="200" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td background="images/Login_bg.jpg">
    	<table width="40%"  border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
    	  <form name="form1" method="post" action="CheckLogin.jsp" onsubmit="return isok(this)">
            <td>		<p>&nbsp;</p>
              <p><span class="style1">用户名</span>&nbsp;&nbsp;&nbsp;
                  <input type="text" name="textfield">
              </p>
              <p><span class="style1">密码&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="password" name="textfield2">
    </span></p>
              <p>
    </span><span class="style1"><span class="style1">验证码&nbsp;</span>&nbsp;
                  <input type=text   size="6" name=rand maxlength=4 value="">&nbsp;&nbsp;<img src="image.jsp" width="60" height="20" border=0></p>
              <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="imageField" type="image" onClick="return isok(this)" src="images/loginbutton.gif" width="54" height="20">   <%//用图片域提交表单要写成onClick="return isok(this)" 并且<form>里保留onSubmit="return isok(this)"才能既判断JS,又正确提交,如写成onClick="document.form1.submit()"则无论JS正误,都提交%>
              </p></td>
    	    </form>
            </tr>
        </table></td>
      </tr>
    </table>
    

    image.jsp

    <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
    <%!
    Color getRandColor(int fc,int bc){//给定范围获得随机颜色
            Random random = new Random();
            if(fc>255) fc=255;
            if(bc>255) bc=255;
            int r=fc+random.nextInt(bc-fc);
            int g=fc+random.nextInt(bc-fc);
            int b=fc+random.nextInt(bc-fc);
            return new Color(r,g,b);
            }
    %>
    <%
    //设置页面不缓存
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
    
    // 在内存中创建图象
    int width=60, height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
    // 获取图形上下文
    Graphics g = image.getGraphics();
    
    //生成随机类
    Random random = new Random();
    
    // 设定背景色
    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);
    
    //设定字体
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));
    
    //画边框
    //g.setColor(new Color());
    //g.drawRect(0,0,width-1,height-1);
    
    
    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
    g.setColor(getRandColor(160,200));
    for (int i=0;i<155;i++)
    {
     int x = random.nextInt(width);
     int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
     g.drawLine(x,y,x+xl,y+yl);
    }
    
    // 取随机产生的认证码(4位数字)
    String sRand="";
    for (int i=0;i<4;i++){
        String rand=String.valueOf(random.nextInt(10));
        sRand+=rand;
        // 将认证码显示到图象中
        g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        g.drawString(rand,13*i+6,16);
    }
    
    // 将认证码存入SESSION
    session.setAttribute("rand",sRand);
    
    
    // 图象生效
    g.dispose();
    
    // 输出图象到页面
    ImageIO.write(image, "JPEG", response.getOutputStream());
    
    
    %> 
    

    checklogin验证时要比较表单输入的验证码同session里存储的验证码是否吻合

    
     String rand = (String)session.getAttribute("rand");
     String input = request.getParameter("rand");
    
    
      if (rand.equals(input)) { }
      else {
    <font color=red size=12px>输入认证码错误!</font>
    
      }
    
    展开全文
  • 验证码到底怎么

    2019-10-04 23:26:45
    如果是网络程序的话,请看下面:以上的几个回答,从表面看是实现了验证码,但问题是都是本地生成,本地校验,与服务器无关,那也失败了验证码的实际功能,本地显示等问题是很容易做的。验证码的功能是不仅仅要验证你...
    不知道你的程序是网络程序,还是单机程序。如果是本地程序的话,要验证码做什么?多此一举。如果是网络程序的话,请看下面:

    以上的几个回答,从表面看是实现了验证码,但问题是都是本地生成,本地校验,与服务器无关,那也失败了验证码的实际功能,本地显示等问题是很容易做的。

    验证码的功能是不仅仅要验证你的帐号和密码,还要验证服务器返回的一个随机数,注意:这个随机数是要服务器生成的,才能保证有效,为的就是验证别人无法用暴力破解你的网络帐号和密码。所以现在的问题就成了在程序中如果取得服务器返回的验证信息,在WEB中是图片,然而不管是在WEB中应用,还是在程序中应用,都不应该采用字符及明文传输验证信息。否则的话,客户端就可以自行处理了(WEB上传回来的就没有数字或字符验证信息,全是图片)。如果是图片的话,问题又转换成了,客户端程序如何取得服务器端的图片并显示(不通过WEB协议)。

    实现起来确实有难度啊。就我个人的观点来说,可以按下面的思路解决:

    客户端起动后先连接服务器端,客户端连接服务器时,生成一个随机数,保存在CSocket信息当中(服务器总是要继承CSocket或自定义一个socket类吧),然后向客户端发回和随机数相关的图片文件(注意是图片文件,而不是验证字符),客户端负责解析并显示该图片,客户端再向用户寻问帐号、密码和验证码,然后登录。

    上面的流程才使验证码起到实际的做用。
     

    转载于:https://www.cnblogs.com/liaocheng/p/4243512.html

    展开全文
  • 验证码

    2017-12-05 19:55:38
    今天搞了好长时间的验证码,终于好了 首先先创建validating.jsp,专门生成图片验证码 代码:  pageEncoding="UTF-8"%>  hello int width = 60; int height = 32; //create the image BufferedImage ...

    今天搞了好长时间的验证码,终于弄好了

    首先先创建validating.jsp,专门生成图片验证码

    代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.util.Random"%>
    <%@ page import="java.io.OutputStream"%>
    <%@ page import="java.awt.Color"%>
    <%@ page import="java.awt.Font"%>
    <%@ page import="java.awt.Graphics"%>
    <%@ page import="java.awt.image.BufferedImage"%>
    <%@ page import="javax.imageio.ImageIO"%>
         <h1>hello</h1>
    <%
    int width = 60;
    int height = 32;
    //create the image
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    // set the background color
    g.setColor(new Color(0xDCDCDC));
    g.fillRect(0, 0, width, height);
    // draw the border
    g.setColor(Color.black);
    g.drawRect(0, 0, width - 1, height - 1);
    // create a random instance to generate the codes
    Random rdm = new Random();
    String hash1 = Integer.toHexString(rdm.nextInt());
    // make some confusion
    for (int i = 0; i < 50; i++) {
    int x = rdm.nextInt(width);
    int y = rdm.nextInt(height);
    g.drawOval(x, y, 0, 0);
    }
    // generate a random code
    String capstr = hash1.substring(0, 4);
    //将生成的验证码存入session
    session.setAttribute("validateCode", capstr);
    g.setColor(new Color(0, 100, 0));
    g.setFont(new Font("Candara", Font.BOLD, 24));
    g.drawString(capstr, 8, 24);
    g.dispose();
    //输出图片
    response.setContentType("image/jpeg");
    out.clear();
    out = pageContext.pushBody();
    OutputStream strm = response.getOutputStream();
    ImageIO.write(image, "jpeg", strm);
    strm.close();
    %>
    一般将它放在webapp下,或者webroot下

    使用${pageContext.request,contextPath}/validating.jsp可得到

    在登录页面

      验证码:<img src="${pageContext.request.contextPath}/validating.jsp" id="yanzheng"/> 
       <a href="javascript:void(0);" οnclick="changge();">看不清 换一张 </a>

    <script type="text/javascript">
    function changge(){
    var img=document.getElementById("yanzheng");
    img.src=img.src+"?"; //意思是让图片重新加载一次 效果类似与直接刷新yanzhengma.jsp有了这个,就能让图片重新加载了
    }





    展开全文
  • 构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数; 使用接口向短信平台发送手机号和验证码数据,然后短信平台再把验证码发送到制定手机号上,接口参数一般包括:目标...
  • php验证码 怎么

    2012-02-12 21:23:24
    跪求高手 加我QQ779846529
  • 我的应用里面是 web浏览器 加 服务器的架构,希望 web 浏览器发手机号码到服务器,然后服务器调用接口发送短信过去,也就是验证码。 然后web 浏览器继续登录。 请问,有什么短信发送平台吗? 我baidu了几家,有的...
  • java验证码汇总

    千次阅读 2009-03-02 18:01:00
    最近在弄验证码,从网上找了些代码,再整理下帖在下面,供大家参考:1.生成gif图片格式的package com.cssweb.common.util;import java.io.*;import java.util.*;import com.sun.image.codec.jpeg.*;import javax....
  • 这个例子是我以前弄验证码识别的时候做的一个小东西,先把图片简单处理后,调用tesseract来识别图片,只能识别英文和数字的 里面很多网上找的一些图片处理的算法,比如双向一次微分,otsu。。去除孤立点等
  • 网上的图形验证码方案都是零星的,了一个随机字体、随机彩色字符、随机字体大小、随机扭曲、随机旋转等技术,能有效的防OCR、描边、深浅色等技术识别 本意是想区分登录、领券、抽奖等一些场景操作的,后来一想,...
  • Java验证码

    2014-12-29 20:42:10
    今天下午参考文档了一个验证码,这里分享一下;这是一个web工程,首先是页面,这里只是一个显示验证码页面index.jsp,使用默认生成的就可以了,表单没有做提交,如下 @ page language="java" import="java.util.
  • Axure8.0-制作图片验证码

    万次阅读 多人点赞 2019-11-15 08:48:38
    图片中的验证码为数字和字母的随机组合; 点击更换验证码实现验证码的更换,验证码随机出现4位字母或数字; 验证码输入时,点击提交按钮,若验证码错误进行错误提示。 元件准备 文本框(输入验证码); 矩形框...
  • php 验证码

    2013-10-09 14:21:41
    因为项目的需要,要去一个登陆时的验证码,毕竟我也是刚毕业才3个月的菜鸟,对验证码的生成过程也不了解。就去网上搜了一下,发现,博文很多,但是对于一穷二白的菜鸟来说,基本都是没有用的。于是自己静下心去看...
  • jeecms屏蔽前端验证码

    2018-12-09 20:03:23
    在性能测试时,通常前端验证码都要屏蔽或个万能验证码,此次屏蔽验证码是在jeecms v9.2源码基础上做处理,内附源码和字节码。
  • 汉字验证码和算式验证码

    千次阅读 2015-04-08 09:29:19
    大家知道简单数字或者字母验证码很容易被破解,但是算式验证码或者中文汉字验证码不容易被破解,   所以建议大家在使用验证码的时候,尽量用算式验证码或者中文汉字验证码。    下面是我写的两种验证码代码,...
  • 验证码那么小,而且看不清楚! 让用户怎么发帖? 论坛能把验证码弄大点吗?
  • 通过向大量人员显示第二个单词并比较结果,他们可以清楚该单词应该是什么。 大量采购书籍的数字化。 当然,它也完全忽略了实际问题:假定的新发现的“生产力”不会使用户受益。 实际上,reCAPTCHA系统使用户毫无...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,628
精华内容 2,651
关键字:

怎么弄验证码