zoukankan      html  css  js  c++  java
  • kaptchaCode(验证码)

    1.springMVC-servlet.xml配置bean

    <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">yes</prop>  
                        <!-- 设置边框颜色-->
                        <prop key="kaptcha.border.color">105,179,90</prop> 
                        <!-- 图片宽度 --> 
                        <prop key="kaptcha.image.width">160</prop>  
                        <!-- 图片高度 -->
                        <prop key="kaptcha.image.height">50</prop>  
                        <prop key="kaptcha.session.key">code</prop>  
                        <!-- 设置字体颜色 -->
                        <prop key="kaptcha.textproducer.font.color">red</prop> 
                        <!-- 设置字体大小 --> 
                        <prop key="kaptcha.textproducer.font.size">35</prop>  
                        <!-- 文字价格 -->
                        <prop key="kaptcha.textproducer.char.space">5</prop>  
                         <!-- 设置字体个数 -->  
                        <prop key="kaptcha.textproducer.char.length">6</prop>  
                        <!-- 配置中文--> 
                        <!-- <prop key="kaptcha.textproducer.impl">com.google.code.kaptcha.text.impl.ChineseTextProducer</prop> -->
                        <!-- 设置字体样式 --> 
                        <prop key="kaptcha.textproducer.font.names">彩云,宋体,楷体,微软雅黑</prop>  
                    </props>  
                </constructor-arg>  
            </bean>  
        </property>  
    </bean> 

    2.控制类VerifyCodeController.java

    package com.shenqz.controller;  
      
    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.stereotype.Controller;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.servlet.ModelAndView;  
    
    import com.google.code.kaptcha.Constants;  
    import com.google.code.kaptcha.Producer; 
      
    /** 
     * 随机验证码控制层 
     *  
     * 使用kaptcha-2.3.2.jar支持 
     *  
     * @author shenqz
     *  
     */  
    @Controller  
    public class VerifyCodeController {  
        
        private Producer captchaProducer = null; 
        
        @Autowired  
        public void setCaptchaProducer(Producer captchaProducer) {  
            this.captchaProducer = captchaProducer;  
        }
        
        @RequestMapping("captcha-image.do")  
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {  
            // 禁止服务器端缓存  
            response.setDateHeader("Expires", 0);
            // 设置标准的 HTTP/1.1 no-cache headers.  
            response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");  
            // 设置IE扩展 HTTP/1.1 no-cache headers (use addHeader).  
            response.addHeader("Cache-Control", "post-check=0, pre-check=0");
            // 设置标准 HTTP/1.0 不缓存图片  
            response.setHeader("Pragma", "no-cache");
            //返回一个 jpeg 图片,默认是text/html(输出文档的MIMI类型)  
            response.setContentType("image/jpeg");
            //为图片创建文本  
            String capText = captchaProducer.createText();
            // 将文本保存在session中,这里就使用包中的静态变量吧  
            request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
              
            BufferedImage bi = captchaProducer.createImage(capText); // 创建带有文本的图片  
            ServletOutputStream out = response.getOutputStream();  
            // 图片数据输出  
            ImageIO.write(bi, "jpg", out);  
            try {  
                out.flush();  
            } finally {  
                out.close();  
            }  
      
            System.out.println("Session 验证码是:" + request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY));  
            return null;  
        }  
        
        @RequestMapping("checkCode.do")  
        @ResponseBody
        public String checkCode(HttpServletRequest request)  {  
            //获取用户输入的验证码  
            /*String submitCode = WebUtils.getCleanParam(request,"j_code"); */ 
              
            //从session中获取系统生成的验证码  
            String kaptchaCode = request.getParameter("kaptchaCode");
            String kaptchaExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);   
              
            System.out.println("用户输入的验证码是:"+kaptchaCode+",系统生成的验证码:"+kaptchaExpected);  
            //进行比较  
            if(!kaptchaCode.isEmpty() && kaptchaCode.equalsIgnoreCase(kaptchaExpected)){  
                return "true";
            }else {  
                return "false";  
            }  
            
        }
    
    
        
    }  

    3.jsp页面index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <base href="<%=basePath%>">  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-1.8.3.js" ></script> 
    <script type="text/javascript">  
             $(function(){  //生成验证码           
                $('#kaptchaImage').click(function () {    
                    $(this).hide().attr('src', 'captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); 
                });        
             
                $('#submitBtn').click(function(){  
                    $.post('checkCode.do?kaptchaCode='+$('#kaptchaCode').val(),function(data){  
                        if (data=='true'){  
                            window.location.href="captchaSuccess.jsp";
                        }else{  
                            alert("验证码错误!");      
                            return false;  
                        }  
                    });  
                });  
            });    
            window.onbeforeunload = function(){    
                //关闭窗口时自动退出    
                if(event.clientX>360&&event.clientY<0||event.altKey){       
                    alert(parent.document.location);    
                }    
            };          
            function changeCode() {  //刷新  
                $('#kaptchaImage').hide().attr('src', 'captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn();    
                event.cancelBubble=true;    
            } 
            
    </script>
    </head>
        <body>
                <table> 
                    <tr>  
                        <td>验证码:<input type="text" name="kaptchaCode" id="kaptchaCode" value="" /></td>  
                        <td align="right">
                            <img src="captcha-image.do" height="25px" width="100px" id="kaptchaImage"/> 
                            <a href="#" onclick="changeCode()">看不清?换一张</a>   
                            <input type="button" value="验证" id="submitBtn"/>
                        </td>
                    </tr>  
                </table>
        </body>
    </html>

    4.页面效果

    5.相关jar

    kaptcha-2.3.2.jar

  • 相关阅读:
    linux嵌入式系统交叉开发环境
    Codeforces Round #208 E. Dima and Kicks
    mvn 编译错误java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init>(Z)V
    黑马程序员_<<TCP>>
    微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
    用pdb调试OpenStack Havana
    MySql Odbc等驱动下载地址分享下
    导入exce表格中的数据l到数据库
    关闭数据备份信息写入数据库日志
    SQL Server之RAID简介
  • 原文地址:https://www.cnblogs.com/shenqz/p/7648869.html
Copyright © 2011-2022 走看看