集成nanocaptcha库生成登录验证码

news2024/11/24 1:39:33

背景

需要实现一个验证码登录的功能需求。这个需求挺简单的,主要实现验证码图片生成给前端,然后,在登录接口比对验证码即可。刚拿到这个需求,好久没有搞过登录这一块了,所以,查了一下相关验证码的知识。下面是维基百科中关于验证码的说明:

全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),又称验证码,是一种区分用户是机器或人类的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于机器无法解答CAPTCHA的问题,回答出问题的用户即可视为人类。

原来是大名鼎鼎的图灵测试,真高级。现在2022年这个时间点,最出名的验证码是Google的reCAPTCHA,但是在国内是无法集成使用的。面对这个问题,著名CDN cloudflare是换了hCaptcha进行验证。可以看一看,这篇文章《从 reCAPTCHA 迁移到 hCaptcha》。看了看hCaptcha官网,看样子也是要收费的。有没有一款,免费,不用连外网,还支持JDK17的简单验证码库类?那,下面就来尝试一下:NanoCaptcha。

步骤

Maven

<dependency>
  <groupId>net.logicsquad</groupId>
  <artifactId>nanocaptcha</artifactId>
  <version>1.3</version>
</dependency>

生成验证码图片

    public BufferedImage getCaptcha(HttpSession session) {
        ImageCaptcha imageCaptcha = new ImageCaptcha.Builder(200, 50).addFilter().addBorder().addNoise().addBackground().addContent().build();
        // 保存验证码到当前会话
        String content = imageCaptcha.getContent();
        session.setAttribute(CAPTCHA_KEY, content);
        // 返回图片
        return imageCaptcha.getImage();
    }

这里核心代码就一行:ImageCaptcha imageCaptcha = new ImageCaptcha.Builder(200, 50).addFilter().addBorder().addNoise().addBackground().addContent().build();使用NanoCaptcha生成验证码图片。
然后,将正确的验证码保存到Spring的集中会话中。最后,返回BufferedImage给请求。Controll方法类似如下:

    @GetMapping(value = "/captcha", produces = "image/png")
    public BufferedImage getCaptcha(HttpSession session){
        return userService.getCaptcha(session);
    }

要想Spring正常返回BufferdImage图片,还得注册个Bean,如下:

    @Bean
    public HttpMessageConverter<BufferedImage> bufferedImageHttpMessageConverter() {
        return new BufferedImageHttpMessageConverter();
    }

登录验证

@Override
    public ResponseEntity<Result> authenticateUser(@Valid @RequestBody LoginRequest loginRequest, HttpSession httpSession)  {

        // 验证验证码是否正确
        String content = (String) httpSession.getAttribute(CAPTCHA_KEY);
        httpSession.removeAttribute(CAPTCHA_KEY);
        if (!(StringUtils.hasText(content) && content.equals(loginRequest.getCaptcha()))) {
            throw new MyException("验证码验证失败");
        }
        ...
   }

这里主要就是从会话取出之前生成的正确验证码,与前端提交的验证码进行比对。
**注意:**从会话中读到正确的验证码之后,要从会话中删除掉这个数据。

测试

获取验证码接口:
获取验证码

总结

在使用NanoCaptcha库之前,还尝试使用了BotDetect库,但是BotDetect不支持JDK17就放弃了。而且BotDetect本身自己说Java版本也是测试版本,再加上这边也只需要一款简单够用的验证码就可以了。

参考:

  • 验证码
  • reCAPTCHA
  • 《从 reCAPTCHA 迁移到 hCaptcha》
  • NanoCaptcha
  • SprintBoot returning a PNG from a Controller’s RequestMapping
  • BotDetect CAPTCHA Generator

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cv2--特征点特征提取(Sift,Orb,Surf)

cv2–特征点特征提取&#xff08;Sift&#xff0c;Orb&#xff0c;Surf&#xff09; 文章目录cv2--特征点特征提取&#xff08;Sift&#xff0c;Orb&#xff0c;Surf&#xff09;1. 关键点和关键点描述子2. Sift2.1 检测的步骤2.2 同时计算关键点kp和描述子des3. Surf4. Orb5. …

61 UseSerialGc的新生代回收调试

前言 呵呵 很久之前看到这样的两篇文章 [讨论] HotSpot VM Serial GC的一个问题 新生代回收调试的一些心得 在第一篇帖子中 R大 详细的讲述了 cheney 算法, 以及自己编写的 cheney 算法, 以及 DefNewGeneration 的具体的一些细节, 以及 和现有的例子的对比 另外还有一些…

leaflet 加载topojson数据,显示图形(代码示例047)

第047个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载topojson文件,将图形显示在地图上。TopoJSON文件格式是geoJSON的一种扩展,它可以对地理空间拓扑进行编码。TopoJSON文件包含数据属性和地理空间的属性。 直接复制下面的 vue+openlayers源代码,操作…

C语言入门(什么是C语言,C语言的编程机制以及一些基础计算机概念)

目录 一.什么是C语言 1.面向对象&#xff1a; 2.面向过程&#xff1a; 二.C语言特点 三.C语言开发时间 四.环境搭建 1.代码编辑器 2.C编译器 五.C语言标准 六.计算机补充知识 1.计算机构成 2.CPU工作 3.编译器 七.编写程序步骤 八.源文件&#xff0c;目标文件&a…

SpringBoot 三大开发工具,你都用过么?

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

Sentinel服务熔断功能(sentinel整合ribbon+openFeign+fallback)

目录 1、Sentinel服务熔断功能 一、Ribbon系列 &#xff08;一&#xff09;提供者9003/9004 &#xff08;二&#xff09;消费者84 二、OpenFeign系列 三、熔断框架比较 2、规则持久化 1、Sentinel服务熔断功能 一、Ribbon系列 &#xff08;一&#xff09;提供者9003/9004 …

DAMA数据管理知识体系指南之元数据管理

第11章 元数据管理 11.1简介 按照通常的说法&#xff0c;元数据的定义是“关于数据的数据”&#xff0c;但是其确切含义是什么&#xff1f;元数据与数据的关系就像数据与自然界的关系。数据反映了真实世界的交易、事件、对象和关系&#xff0c;而元数据则反映了数据的交易、事…

技术分享|终端安全防护|ChatGPT会创造出超级恶意软件吗?

ChatGPT是一个强大的人工智能聊天机器人&#xff0c;它使用大量的数据收集和自然语言处理与用户“交谈”&#xff0c;感觉像是和正常的人类对话。它的易用性和相对较高的准确性让用户可以利用它做任何事情&#xff0c;从解决复杂的数学问题&#xff0c;到写论文&#xff0c;创建…

【Linux】操作系统与进程的概念

目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备&#xff1f; 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止 bash 通过系统调用创建子进程 fork的辨析 冯诺依曼体系 &#x1f956;冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将…

(超详细)Navicat的安装和激活,亲测有效

步骤一&#xff1a;准备安装包 下载Navicat&#xff0c;我用的v15最好一致&#xff08;私信可以发你安装包和注册码&#xff09;步骤二&#xff1a;关闭杀毒软件&#xff0c;然后需要断掉网络&#xff08;一定断网&#xff09; 步骤三&#xff1a;一路next安装&#xff0c;安装…

nodejs如何实现Digest摘要认证?

文章目录1.前言2. 原理3. 过程4. node实现摘要认证5. 前端如何Digest摘要登录认证&#xff08;下面是海康的设备代码&#xff09;1.前言 根据项目需求&#xff0c;海康设备ISAPI协议需要摘要认证&#xff0c;那么什么是摘要认证&#xff1f;估计不少搞到几年的前端连摘要认证都…

每日一个解决问题:事务无法回滚是什么原因?

今天在码代码时发现事务不回滚了&#xff0c;学过MySQL 事务小伙伴们都懂&#xff0c;通过 begin 开启事务&#xff0c;通过 commit 提交事务或者通过 rollback 回滚事务。 正常来说&#xff0c;当我们开启一个事务之后&#xff0c;需要 commit 或者 rollback 来结束一个事务的…

下面这段Python代码执行后的输出结果是?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤几行归塞尽&#xff0c;念尔独何之。大家好&#xff0c;我是皮皮。一、前言前几天在Python青铜交流群【桐霄L】问了一个Python基础的问题&#xff0c;这里拿出…

TortoiseGit 使用教程

一、下载工具 这里给大家准备了所有安装包自取 链接&#xff1a;https://pan.baidu.com/s/1xrxxgyNXNQEGD_RjwKnPMg 提取码&#xff1a;qwer 也可在官网自行下载最新版 1.下载git&#xff0c;直接去官网下载Git - Downloads&#xff0c;根据自己的系统合理下载&#xff0c…

openGauss客户端安装

目录1. 准备两台Linux系统2. 安装openGauss客户端3. 设置客户端主机环境变量4. 修改服务端配置文件5. 测试客户端远程连接客户端环境&#xff1a;openEuler release 22.03 (LTS-SP1) 服务端环境: openEuler release 20.03 (LTS-SP3) openEuler系统官网下载 1. 准备两台Linux系…

尚医通(十)数据字典加Redis缓存 | MongoDB

目录一、Redis介绍二、数据字典模块添加Redis缓存1、service_cmn模块&#xff0c;添加redis依赖2、service_cmn模块&#xff0c;添加Redis配置类3、在service_cmn模块&#xff0c;配置文件添加redis配置4、通过注解添加redis缓存5、查询数据字典列表添加Redis缓存6、bug&#x…

[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置

RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色\33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5总共 6 级 想用 精确RGB值 真实地 大红色画个 大红桃心 ♥️ 有可能吗&#xff1f;&#xff1f;&#x1f914; rgb 模式 关于 RGB 模式…

07- 梯度下降优化(Lasso/Ridge/ElasticNet) (机器学习)

归一化: 减少数据不同数量级对预测的影响, 主要是将数据不同属性的数据都降到一个数量级。 最大值最小值归一化:优点是可以把所有数值归一到 0~1 之间&#xff0c;缺点受离群值影响较大。0-均值标准化: 经过处理的数据符合标准正态分布&#xff0c;即均值为0&#xff0c;标准差…

Android 逆向工具大整理,碉堡了

文章目录jadx打开 gui 界面把安装包打开双击变量名和方法名可以高亮所有出现的地方**强大的搜索功能****搜索资源****查看 APK 签名****查看 APK dex 数&#xff0c;方法数****查看资源&#xff0c;配置清单****展开包名**查找方式引用反混淆导出 Gradle 工程导出反编译资源cla…

腾讯云安全组配置参考版

官方文档参考: 云服务器 安全组应用案例-操作指南-文档中心-腾讯云 新建安全组时&#xff0c;您可以选择腾讯云为您提供的两种安全组模板&#xff1a; 放通全部端口模板&#xff1a;将会放通所有出入站流量。放通常用端口模板&#xff1a;将会放通 TCP 22端口&#xff08;Lin…