kaptcha 实现登录验证码

介绍:近期公司的网站出现了恶意注册,恶意刷短信的恶劣行为,唉,真恶劣,所以完善登录验证和发送短信验证的国字号任务秘密开启

1.相关参数

Constant

描述

默认值

kaptcha.border

图片边框,合法值:yes , no

yes

kaptcha.border.color

边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue.

black

kaptcha.border.thickness

边框厚度,合法值:>0

1

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.key

session key

KAPTCHA_SESSION_KEY

kaptcha.session.date

session date

KAPTCHA_SESSION_DATE


2.配置web.xml

<!--验证码-->
<servlet>
    <servlet-name>kaptcha</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    <init-param>
        <param-name>kaptcha.border</param-name>
        <param-value>no</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.image.width</param-name>
        <param-value>120</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.image.height</param-name>
        <param-value>42</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.textproducer.font.size</param-name>
        <param-value>32</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.textproducer.char.length</param-name>
        <param-value>5</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.obscurificator.impl</param-name>
        <param-value>com.google.code.kaptcha.impl.WaterRipple</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>kaptcha</servlet-name>
    <url-pattern>/kaptcha</url-pattern>
</servlet-mapping>

3. 页面显示

<li class="proving-li clearfix">
    <input type="text" placeholder="请输入图片验证码" οnkeyup="checkImageCode()"
           class="form-control input-lg pull-left" id="imageRandomCode">
    <div class="input-group pull-right">
        <img src="/kaptcha" id="codeImg" οnclick="getCode()" width="146" height="46">
    </div>
</li>

4.添加maven依赖

<dependency>
    <groupId>com.google.code.kaptcha</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

5.检查图片验证码的有效性

/**
 * 检查图片验证码
 * @param request
 * @param captcha
 * @return
 */
@RequestMapping("/checkCaptcha")
@ResponseBody
public Map<String, Object> checkCaptcha(HttpServletRequest request,
                                        @RequestParam("captcha") String captcha) {
    try {
        //从session当中读取验证码
        String kaptchaExpected = (String) request.getSession()
                .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

        if (captcha.equals(kaptchaExpected)) {
            return this.getResultMap(ResultCode.SUCCESS, "输入正确", null);
        } else {
            return this.getResultMap(ResultCode.FAIL, "检验失败", null);
        }
    } catch (Exception e) {
        logger.error("checkCaptcha---error", e);
        return this.getResultMap(ResultCode.ERROR, "系统错误", null);
    }
}

展开阅读全文

没有更多推荐了,返回首页