美文网首页
Kaptcha-验证码

Kaptcha-验证码

作者: __元昊__ | 来源:发表于2019-11-11 08:24 被阅读0次

    Kaptcha 简介

    Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:

    • 验证码的字体
    • 验证码字体的大小
    • 验证码字体的字体颜色
    • 验证码内容的范围(数字,字母,中文汉字!)
    • 验证码图片的大小,边框,边框粗细,边框颜色
    • 验证码的干扰线
    • 验证码的样式(鱼眼样式、3D、普通模糊、...)

    Kaptcha 详细配置表

    Constant 描述 默认值
    kaptcha.border 图片边框,合法值:yes , no yes
    kaptcha.border.color 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. black
    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 图片样式:<br />水纹 com.google.code.kaptcha.impl.WaterRipple <br /> 鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy <br /> 阴影 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.key session key KAPTCHA_SESSION_KEY
    kaptcha.session.date session date KAPTCHA_SESSION_DATE

    Spring MVC 整合 Kaptcha

    POM

    pom.xml 配置文件如下:

    <dependency>
        <groupId>com.github.penggle</groupId>
        <artifactId>kaptcha</artifactId>
        <version>2.3.2</version>
    </dependency>
    

    创建 Spring 配置

    创建一个名为 spring-context-kaptcha.xml Spring 配置文件,配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.1.xsd
     http://www.springframework.org/schema/mvc
     http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
        <!-- Kaptcha组件配置 -->
        <bean id="kaptchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
            <property name="config">
                <bean class="com.google.code.kaptcha.util.Config">
                    <constructor-arg>
                        <props>
                            <!-- 验证码宽度 -->
                            <prop key="kaptcha.image.width">120</prop>
                            <!-- 验证码高度 -->
                            <prop key="kaptcha.image.height">44</prop>
                            <!-- 生成验证码内容范围 -->
                            <prop key="kaptcha.textproducer.char.string">0123456789AKWUEHPMRX</prop>
                            <!-- 验证码个数 -->
                            <prop key="kaptcha.textproducer.char.length">4</prop>
                            <!-- 是否有边框 -->
                            <prop key="kaptcha.border">no</prop>
                            <!-- 边框颜色 -->
                            <prop key="kaptcha.border.color">105,179,90</prop>
                            <!-- 边框厚度 -->
                            <prop key="kaptcha.border.thickness">1</prop>
                            <!-- 验证码字体颜色 -->
                            <prop key="kaptcha.textproducer.font.color">black</prop>
                            <!-- 验证码字体大小 -->
                            <prop key="kaptcha.textproducer.font.size">30</prop>
                            <!-- 验证码所属字体样式 -->
                            <prop key="kaptcha.textproducer.font.names">楷体</prop>
                            <!-- 干扰线颜色 -->
                            <prop key="kaptcha.noise.color">yellow</prop>
                            <!-- 验证码文本字符间距 -->
                            <prop key="kaptcha.textproducer.char.space">8</prop>
                            <!-- 图片样式 :阴影-->
                            <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
                        </props>
                    </constructor-arg>
                </bean>
            </property>
        </bean>
    </beans>
    

    控制器关键代码

    Controller 层的关键代码如下,主要作用为将生成的验证码放入 Session 并输出到页面

        @Autowired
        DefaultKaptcha kaptchaProducer;
    //验证码接口
        @RequestMapping(value = "/captcha", method = RequestMethod.POST)
        public void captcha(HttpServletResponse response,HttpServletRequest request) throws Exception{
            //生成验证码字符串
            String text = kaptchaProducer.createText();
            //验证码存入session
            HttpSession session = request.getSession();
            session.setAttribute("captchaCode", text);
            //验证码转换
            BufferedImage image = kaptchaProducer.createImage(text);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageIO.write(image, "jpg", byteArrayOutputStream);
            //定义响应值,写入byte
            byte[] bytes = byteArrayOutputStream.toByteArray();
            String captchaCode =(String) session.getAttribute("captchaCode");
            System.out.println(captchaCode);
            /*response.setHeader("Cache-Control", "no-store");
            response.setHeader("Pragma", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");*/
            OutputStream responseOutputStream = response.getOutputStream();
            responseOutputStream.write(bytes);
            responseOutputStream.flush();
            responseOutputStream.close();
        }
    

    JSP 关键代码

    JSP 使用 <img /> 标签去请求验证码图片

    <img id="verification" src="/verification" style="cursor: pointer;" title="看不清?换一张" />
    
    

    为图片绑定一个点击事件用于无刷新更换验证码

    $(function () {
        // 刷新验证码
        $("#verification").bind("click", function () {
            $(this).hide().attr('src', '/verification?random=' + Math.random()).fadeIn();
        });
    });
    
    

    相关文章

      网友评论

          本文标题:Kaptcha-验证码

          本文链接:https://www.haomeiwen.com/subject/qumzbctx.html