• Java web验证码——kaptcha的使用


    一.配置kaptcha的jar包

      

      pom.xml配置:

    <-- 目前只有2.3.2版本-->    
    <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
            <dependency>
                <groupId>com.github.penggle</groupId>
                <artifactId>kaptcha</artifactId>
                <version>2.3.2</version>
            </dependency>

      依赖jar包 (commons-fileupload):支持多文件上传

      

      commons-fileupload配置:

        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
            <!-- 上传文件 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.4</version>
            </dependency>

    二.kaptcha样式配置

      web.xml:配置kaptcha的servlet及部分样式

        <servlet>
            <servlet-name>Kaptcha</servlet-name>
            <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
            <!-- 定义验证码样式 -->
            <!-- 是否有边框 -->
            <init-param>
                <param-name>kaptcha.border</param-name>
                <!-- 没有边框 no -->
                <param-value>no</param-value>
            </init-param>
            <!-- 字体颜色 -->
            <init-param>
                <param-name>kaptcha.textproducer.font.color</param-name>
                <param-value>red</param-value>
            </init-param>
            <!-- 图片宽度 -->
            <init-param>
                <param-name>kaptcha.image.width</param-name>
                <param-value>135</param-value>
            </init-param>
            <!-- 使用哪些字符生成验证码 -->
            <init-param>
                <param-name>kaptcha.textProducer.char.string</param-name>
                <param-value>ACDEFHKPRSTWX345679</param-value>
            </init-param>
            <!-- 图片高度 -->
    
            <init-param>
                <param-name>kaptcha.image.height</param-name>
                <param-value>50</param-value>
            </init-param>
            <!-- 字体大小 -->
            <init-param>
                <param-name>kaptcha.textproducer.font.size</param-name>
                <param-value>43</param-value>
            </init-param>
            <!-- 干扰线的颜色 -->
            <init-param>
                <param-name>kaptcha.noise.color</param-name>
                <param-value>black</param-value>
            </init-param>
            <!-- 验证码字符个数 -->
            <init-param>
                <param-name>kaptcha.textproducer.char.length</param-name>
                <param-value>4</param-value>
            </init-param>
                <!-- 字体 -->
            <init-param>
                <param-name>kaptcha.textproducer.font.names</param-name>
                <param-value>Aria</param-value>
            </init-param>    
        </servlet>
        <servlet-mapping>
        <servlet-name>Kaptcha</servlet-name>
        <url-pattern>/Kaptcha</url-pattern>
        </servlet-mapping>

      kaptcha详细参数:

    三.后端验证

      从前端接收验证码并验证是否正确:

    import javax.servlet.http.HttpServletRequest;
    
    public class CodeUtil {
        public static boolean checkVerifyCode(HttpServletRequest request) {
            String verifyCodeExpected = (String) request.getSession()
                    .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
            String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
            if (verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)) {
                return false;
    
            }
            return true;
        }
    }

     ·  前端部分js代码:

    .....
    <!-- 获取输入框验证码-->
    var verifyCodeActual=$('#j_captcha').val();
                if(!verifyCodeActual){
                    $.toast("请输出验证码");
                    return;
                }
    <!--通过ajax异步提交-->
                formData.append('verifyCodeActual',verifyCodeActual);
                $ajax({
                    url:registerShopUrl,
                    type:'POST',
                    data:formData,
                    contentType:false,
                    processData:false,
                    cacche:false,
                    success:function(data){
                         if(data.success){
                             $.toast("提交成功");
                         }
                         else{
                             $.toast("提交失败:"+data.errMsg);
                         }
                         $('#captcha_img').click();
                    }
                })

     四.注意(记得配置文件解析)

      文件解析器配置(不然获取到的验证码为空):

    <!-- 文件上传解析器 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 默认编码 -->
            <property name="defaultEncoding" value="utf-8"></property>
            <!-- 上传文件的最大 尺寸(单位是字节)-->
            <!-- 1024*1024*20=20971520 -->
            <property name="maxUploadSize" value="20971520"></property>
            <!-- 允许写在内存中的最大值 -->
            <property name="maxInMemorySize" value="20971520"></property>
    
        </bean>
  • 相关阅读:
    Antenna Placement---poj3020(最大匹配)
    Strategic Game--hdu1054(最小覆盖点)
    Oil Skimming---hdu4185(最大匹配)
    Windows平台下NS2网络仿真环境的搭建
    视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
    最简单的基于FFMPEG+SDL的音频播放器
    FFplay源代码分析:整体流程图
    图解FFMPEG打开媒体的函数avformat_open_input
    100行代码实现最简单的基于FFMPEG+SDL的视频播放器
    视频编码标准汇总及比较
  • 原文地址:https://www.cnblogs.com/lyq-biu/p/10853830.html
Copyright © 2020-2023  润新知