截止到目前,Springboot最新稳定版本已经迭代到3.0.5,而我们项目中使用的行为验证码框架ja-captcha还没有适配Springboot3,码云上类似的请求也没有得到过回应,于是决定自己动手适配一下,研究下来发现适配3.x并没有那么难,这里记录一下适配过程,希望能帮到他人

首先搭建一个Springboot2的项目,以最简单的方法整合验证码,这里我选择使用springboot2.7.5ja-captcha1.3.0,在Maven中添加依赖后直接启动项目即可

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
</parent>
<groupId>site.hanzhe.boot3.captcha</groupId>
<artifactId>springboot3-ja-captcha</artifactId>
<version>0.0.1</version>
<description>Springboot3整合ja-captcha行为验证码解决方案</description> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.anji-plus</groupId>
<artifactId>spring-boot-starter-captcha</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies> </project>

可以看到已经整合成功了,而且调用接口测试也一切正常,现在将Springboot版本改成3.0.5,然后刷新Maven后重启一下项目试试看,发现控制台已经不打印ja-captcha的日志了,而且接口也返回404

在整合之前,我们需要了解一下Springboot3.x的两个重要的变化

第一个变化是Springboot3以JakartaEE 9为基准并支持JakartaEE 10,其实Jakarta就是Java,Oracle将JavaEE移交给了Eclipse基金会,并不允许其使用原本的java名称,所以Java改名为Jakarta,原javax包名也修改为了jakarta

第二个变化是Springboot自动配置文件的变更,Springboot3废弃了factories的自动配置,改为使用imports文件

了解这两点后我们回到整合验证码的项目中,首先可以观察到最明显的一点,启动项目后控制台不在打印ja-captcha的日志了,这就代表自动配置并没有生效,在外部库中找到ja-captcha的自动配置,发现它是使用factories进行自动配置的,该方法已经失效,我们需要创建新的自动配置文件来启用它

在resource目录下新建META-INF/spring两个目录,在目录下添加自动配置文件,并将ja-captcha的自动配置类添加进去然后重启项目查看效果,文件名太长我就放在代码块中了

# 文件名
org.springframework.boot.autoconfigure.AutoConfiguration.imports # 文件内容
com.anji.captcha.config.AjCaptchaAutoConfiguration

可以看到项目启动报错了,不过不用担心,报错是好事儿,说明自动配置生效了,提取报错中的主要信息,是创建captchaController这个Bean的时候报错了,报错的原因是没有找到javax/servlet/http/HttpServletRequest这个类,因为Springboot3中javax的包名统一修改为了jakarta,所以这个类会找不到

这里直接使用替换法简单粗暴的解决这个问题,找到报错的这个类,在项目中创建一个相同包名的的类,将里面的javax替换为jakarta,这样在创建Bean的时候Java找到的类是我们自己的jakarta的类,就不会调用旧的javax的类了

替换后重启项目查看效果,可以发现项目已经启动成功了,并且控制台打印了ja-captcha的启动日志,调试接口也成功了

本文使用笨方法在Springboot3中使用ja-captcha,还是希望作者早日做适配

Springboot3整合使用ja-captcha行为验证码解决方案的更多相关文章

  1. VisualCaptcha – 灵活的可视化验证码解决方案

    visualCaptcha 是一个可配置的验证码解决方案,专注于可访问性和简单性,同时保持安全性.它也支持移动,视网膜设备,并有一个创新的可访问性的解决方案. visualCaptcha 现在可以跨多 ...

  2. python爬虫模拟登录验证码解决方案

    [前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...

  3. 使用.Net Core 2.1开发Captcha图片验证码服务

    更新后续篇:Captcha服务(后续1) 使用.Net Core 2.1开发Captcha验证码服务 开发工具:Visual Studio 2017 15.7.3 开发平台:64位 Windows 1 ...

  4. captcha ~ 生成验证码图片

    验证码在我们的世界中可以保护我们的信息安全的一个保障之一 这就是生成验证码的代码     # 导报 from captcha.image import ImageCaptcha #验证码的包 from ...

  5. Lumen5.7快速实现Captcha图片验证码功能

    公司发送短信注册的接口需要防刷,需要一个图形验证码,不考虑收费产品. Lumen5.7+nginx+mysql 使用了这个作者的扩展包,只讲实现.https://github.com/Youngyez ...

  6. django学习,captcha图形验证码的使用

    很多网站在登录或者注册的时候都有验证码,让你去输入. 刚好有这么一款插件,可以满足这个功能 首先,先pip install  django-simple-captcha 然后再setting里添加,如 ...

  7. Lumen 实现接口 Captcha图片验证码功能

    安装 composer require youngyezi/captcha 使用 新版的包已经删除了 session 支持,完全交给业务自由选择存储方式 个人觉得这样更方便来解耦业务,尤其 Lumen ...

  8. Discuz!NT3.6与网站整合(操作用户信息)解决方案

    因为网站要加个论坛,所以就用到了Discuz!NT3.6. 可惜目前官方论坛已经关闭,只有3.6版本的有源码,3.9的没有源码,不好操作,下载地址: http://download.comsenz.c ...

  9. thinkphp整合系列之短信验证码、订单通知

    现在这个短信通知泛滥的年代:应用如果没有个短信注册:你都不敢说你是搞开发的: 这个验证码搞起来是不难的:但是如果刚接触也是有点不知从哪下手的迷茫: 先讲下概念: 要想发送验证码:需要至少三项:appi ...

  10. laravel整合JWT遇到的问题及解决方案

    1.在执行 php artisan jwt:secret 生成密钥的时候,报错Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() do ...

随机推荐

  1. Markdown基础语法练习

    Markdown语法学习 标题 三级标题 四级标题 字体 hello,world! 两端各两个*****号 hello,world! 两端各一个*****号 hello,world! 两端各三个*** ...

  2. Lenovo Vantage 完全卸载

    Lenovo Vantage 完全卸载 我的T480,最近因为在休眠状态下断电导致不开机,按开机键所有灯闪烁.翻阅百度发现居然是通病,自从 type-c 供电方案以来就有,无奈只有被奸商坑了350,只 ...

  3. android系统上编写、运行C#代码

    最近找到个好玩的APP,C#Shell (Compiler REPL),可以在安卓系统上编写和运行C#代码,配合sqlite数据库,写了个小爬虫,运行还不错: 运行一些小爬虫或者定时任务可以用这个,毕 ...

  4. idea plugins搜不出来东西

    今天学习Vue要安装一个Vue.js的插件,在idea的plugins上搜死活搜不出来,参照了网上的关防火墙,勾选什么auto什么的选项还是不管用,最后瞎捣鼓弄好了,在博客上记录一下. 打开手机数据( ...

  5. vue3-使用百度地图遇到的坑-地图实例化

    1.创建地图实例 原因:在使用vue3为了只定义一次地图实例,在所有方法中使用,直接使用如下定义方式: setup() { const data = reactive({ bmap: null,}) ...

  6. 1--我们写了一个java类,那么生成一个对象占用多大的内存?

    public class Student { private long id; private long userId; private byte state; private long create ...

  7. Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found

    Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found 解决方法 ...

  8. ISCTF 2022

    Re SigninReverse ida 64 位 打开程序,即可获得flag ISCTF{27413241-9eab-41e2-aca1-88fe8b525956} ezbase # coding= ...

  9. OVS内核流表查询过程

    概括 现在的OVS使用microflow+megaflow缓存查询流表,ovs整体流程是从ovs_vport_receive(datapath/vport.c)开始,然后进入ovs_dp_proces ...

  10. 499div2-E Border :裴蜀定理

    这个定理就像类似学扩展欧几里得判断是否有解的条件,当时是ax+by = c:仅当c = k*gcd(a,b)时有解,其实也就是只要是公约数的倍数就行. 而裴蜀定理是多个未知量x1*a1+x2*a2+. ...