一行代码实现验证码--Happy Captcha

简介: 一行代码实现验证码--Happy Captcha

使用 Happy Captcha,一行代码生成验证码。

这里做一个整理和记录:

引入jar包:

<dependency>
  <groupId>com.ramostear</groupId>
  <artifactId>Happy-Captcha</artifactId>
  <version>1.0.1</version>
</dependency>

开始使用,只需一行代码就可以生成验证码:

@Controller
public class HappyCaptchaController{
    @GetMapping("/captcha")
    public void happyCaptcha(HttpServletRequest reqeust,HttpServletResponse response){
        HappyCaptcha.require(request,response).build().finish();
    }
}

这里还可以使用链式编程,对验证码的一些属性进行设置:

public void happyCaptcha(HttpServletRequest reqeust, HttpServletResponse response){
            HappyCaptcha.require(reqeust,response)
                    .style(CaptchaStyle.IMG)            //设置展现样式为图片
                    .length(4)                            //设置字符长度为4
                    .width(220)                            //设置动画宽度为220
                    .height(80)                            //设置动画高度为80
                    .build().finish();                  //生成并输出验证码;
        }

实现效果如下:

如果CaptchaStyle设置为CaptchaStyle.ANIM,生成的验证码还会有动画效果。


打开finish方法的源码。我们可以看到生成的验证码是放在session中了:

 captcha.setLength(this.length);
                captcha.setFont(this.font);
                this.setHeader(this.response);
                this.request.getSession().setAttribute("happy-captcha", captcha.getCaptchaCode());
                captcha.render(this.response.getOutputStream());
                return true;```

所以,使用过的验证码要从session中清除, Happy Captcha提供了这样的方法来实现:

 public void removeCaptcha(HttpServletRequest request){
            HappyCaptcha.remove(request);
        }

最后就是对于验证码的校验:

public String verify(String code,HttpServletRequest request){
            //Verification Captcha
            boolean flag = HappyCaptcha.verification(request,code,true);
            if(flag){
                //Other operations...
            }
            return code;
        }

打开verification方法的源码,我们可以看到:

if (code != null && !code.trim().equals("")) {
            String captcha = (String)request.getSession().getAttribute("happy-captcha");
            return ignoreCase ? code.equalsIgnoreCase(captcha) : code.equals(captcha);
        } else {
            return false;
        }

就是从session中取出刚才存入的验证码,然后与输入的验证码code进行对比。

目录
相关文章
|
存储 人工智能 前端开发
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
书接上回,上一回我们按照“低耦合高内聚”的组织架构方针对项目的整体结构进行了优化,本回将会继续编写业务,那就是用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,校验通过后留存当前登录用户的信息,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
|
测试技术
Confluence 6 配置验证码(Captcha)来防止垃圾
如果你的 Confluence 站点是对公众开放的(允许匿名用户使用,添加评论,创建页面等),你可能会发现你的站点会被自动创建很多垃圾页面,评论或者其他垃圾内容。
1107 0
|
PHP 数据安全/隐私保护
laravel 5.6 登录验证码 captcha 引入
用户登陆注册, 不管前台后台, 如果掌握了手机短信和图形验证码, 那安全性会好很多, PHP上常见有两个captcha图形验证方式, gregwar/captcha和mews/captcha 参考下面的连接,用mews/captcha,感觉很方便。
6673 0
|
6月前
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
407 0
|
3月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
1月前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
27 1
|
1月前
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
78 2
|
2月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
49 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
3月前
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录
|
3月前
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?