spring整合Google Kaptcha验证码的使用

Easter79
• 阅读 484

Kaptcha是什么?

kaptcha 是谷歌开源的非常实用的验证码生成工具,基于SimpleCaptcha的开源项目。使用Kaptcha 生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用,通过配置,可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验。

怎么使用Kaptcha?

1.首先要项目使用Kaptcha肯定要依赖kaptcha的jar,maven项目的话直接加入如下依赖,非maven项目就自己下载jar包吧

com.github.axet kaptcha 0.0.9

官方下载链接:https://code.google.com/archive/p/kaptcha/downloads,当然你得翻墙哈

2.配置kaptcha

以项目使用spring为例,配置一个默认的Kaptcha的bean,如下

<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha" scope="singleton">
        <property name="config">
            <bean class="com.google.code.kaptcha.util.Config">
                <constructor-arg>
                    <props>
                        <prop key="kaptcha.session.key">kaptcha.code</prop>  
                        <!-- 无边框 -->
                        <prop key="kaptcha.border">no</prop>
                        <prop key="kaptcha.textproducer.font.color">black</prop>
                        <!-- 渲染效果:水纹:WaterRipple;鱼眼:FishEyeGimpy;阴影:ShadowGimpy -->
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
                        <!-- 不要噪点 -->
                        <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
                        <prop key="kaptcha.image.width">90</prop>
                        <prop key="kaptcha.image.height">33</prop>
                        <prop key="kaptcha.textproducer.font.size">25</prop>
                        <prop key="kaptcha.textproducer.char.length">4</prop>
                        <prop key="kaptcha.textproducer.char.space">5</prop>
                        <!-- 和登录框背景颜色一致 -->
                        <prop key="kaptcha.background.clear.from">247,247,247</prop>
                        <prop key="kaptcha.background.clear.to">247,247,247</prop>
                    </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>

3.将生成的验证码保存进session中,并输出由验证码生成的图片流到页面

        @Autowired
    private Producer captchaProducer;
    @RequestMapping(value = "/kaptchaImage", method = RequestMethod.GET)
    public void kaptcha(HttpServletRequest req, HttpServletResponse rsp) {
        ServletOutputStream out = null;
        try {
            HttpSession session = req.getSession();
            rsp.setDateHeader("Expires", 0);
            rsp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
            rsp.addHeader("Cache-Control", "post-check=0, pre-check=0");
            rsp.setHeader("Pragma", "no-cache");
            rsp.setContentType("image/jpeg");
            String capText = captchaProducer.createText();
            session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
            BufferedImage image = captchaProducer.createImage(capText);
            out = rsp.getOutputStream();
            ImageIO.write(image, "jpg", out);
            out.flush();
        }catch(IOException e)
        {
            throw new SystemException(e);
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                throw new SystemException(e);
            }
        }
    }

4.校验用户输入的验证码和保存进session的是否一直,达到验证目的

@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "text/html; charset=utf-8")
    public String userLogin(String accountName, String password, String captcha, Boolean rememberMe, HttpServletRequest request) {
         //从session中取出kaptcha生成的验证码text值
            String expected = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
            //获取用户页面输入的验证码
            if(!captcha.equalsIgnoreCase(expected))
            {
                request.setAttribute("error", "验证码错误!");
                return "/login";
            }else
            {
                    xxxx验证码后的后续逻辑
                 }
}

 更详细的Kaptcha验证码配置?

  • kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,no

  • kaptcha.border.color   边框颜色   默认为Color.BLACK

  • kaptcha.border.thickness  边框粗细度  默认为1

  • kaptcha.producer.impl   验证码生成器  默认为DefaultKaptcha

  • kaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreator

  • kaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwx

  • kaptcha.textproducer.char.length   验证码文本字符长度  默认为5

  • kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)

  • kaptcha.textproducer.font.size   验证码文本字符大小  默认为40

  • kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACK

  • kaptcha.textproducer.char.space  验证码文本字符间距  默认为2

  • kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoise

  • kaptcha.noise.color   验证码噪点颜色   默认为Color.BLACK

  • kaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipple

  • kaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRenderer

  • kaptcha.background.impl   验证码背景生成器   默认为DefaultBackground

  • kaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAY

  • kaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITE

  • kaptcha.image.width   验证码图片宽度  默认为200

  • kaptcha.image.height  验证码图片高度  默认为50

效果图如下

spring整合Google Kaptcha验证码的使用

本文链接地址: http://www.kailing.pub/article/index/arcid/92.html

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
Vue 前端验证码
⭐前言在vue项目中,登录界面必不可少。简单项目里,验证码通常由数字字母构成。一般有两种产生方式:前端,后端。后端生成,前端直接调用接口,将返回的url放入a标签即可。而前端生成,则大多用canvas画布实现,如何让验证码随屏幕大小变化,还能保持原样不失真,这就是我们要实现的功能。当然,在创建vue项目时,我们必须得克服跨域问题。No'
Wesley13 Wesley13
3年前
java生成图形验证码
首先,需要生成验证码字符串,方式很多,下面提供一种,根据指定源的方式来生成验证码/使用系统默认字符源生成验证码@paramverifySize验证码长度@return/publicstaticStringgenera
Stella981 Stella981
3年前
Python生成图片验证码
最近公司网站,需要在注册模块添加验证码,防止其他人频繁的恶意注册,我们后端使用的是python进行开发,所以研究了下python图片验证码的方法。最后确定使用python里面PIL库,通过Image,ImageDraw,ImageFont,ImageFilter的模块生成图片验证码设计思路(这里就不画图了):(1)用户填写用户名(必须先填)
Stella981 Stella981
3年前
Google Kaptcha验证码的使用 Kaptcha是什么? 怎么使用Kaptcha? 更详细的Kaptcha验证码配置? 效果图如下
Kaptcha是什么?kaptcha是谷歌开源的非常实用的验证码生成工具,基于SimpleCaptcha的开源项目。使用Kaptcha生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用,通过配置,可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取
Stella981 Stella981
3年前
Kaptcha生成验证码
转载该文章的原因是为了保存利用命令行jar包上传到本地库的方法,哈哈。。一:Kaptcha介绍简单介绍:kaptcha是一个扩展自simplecaptcha的验证码库,在 Java(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Flib.csdn.
Wesley13 Wesley13
3年前
.Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式。我结合了自己的经验和网上的验证码资料,总结一下c验证码开发,直接放代码,文中有注释,可以轻松理解代码意思。功能:实现了打开登陆页面是生成验证码图片以及点击验证码时,刷新验证码功能,验
马尚 马尚
7个月前
用Python和机器学习识别英文数字验证码
在本项目中,我们将展示如何使用Python和机器学习技术来识别英文数字验证码。英文数字验证码通常包含了一系列随机生成的字母和数字,我们将利用机器学习模型来训练识别这些验证码。首先,我们需要导入所需的库:pythonimportosimportnumpyas
马尚 马尚
7个月前
使用OpenCV和Tesseract识别英文数字验证码
在这个项目中,我们将展示如何使用OpenCV和Tesseract来识别英文数字验证码。验证码是一种常见的安全措施,用于防止机器人或恶意软件的访问。英文数字验证码通常包含了随机生成的字母和数字,我们将利用OpenCV进行图像处理,并使用Tesseract来进
马尚 马尚
7个月前
深度解析验证码技术
随着网络安全的日益重要,验证码技术成为了防止机器人入侵的重要工具。本文将深入剖析验证码技术的核心原理和实际应用,并通过提供完整的代码示例,帮助读者更好地理解和应用验证码技术。1.w值的生成策略:在验证码生成过程中,w值的正确生成至关重要。根据描述,我们知道
马尚 马尚
7个月前
深度解析验证码技术与应用实践
随着网络安全的日益重要,验证码技术成为了防止机器人入侵的重要工具。本文将深入剖析验证码技术的核心原理和实际应用,并通过提供完整的代码示例,帮助读者更好地理解和应用验证码技术。1.w值的生成策略:在验证码生成过程中,w值的正确生成至关重要。根据描述,我们知道
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k