ja-captcha还没有适配Springboot3,码云上类似的请求也没有得到过回应,于是决定自己动手适配一下,研究下来发现适配3.x并没有那么难,这里记录一下适配过程,希望能帮到他人
springboot2.7.5和ja-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>
3.0.5,然后刷新Maven后重启一下项目试试看,发现控制台已经不打印ja-captcha
的日志了,而且接口也返回404
第一个变化是Springboot3以JakartaEE 9为基准并支持JakartaEE 10,其实Jakarta就是Java,Oracle将JavaEE移交给了Eclipse基金会,并不允许其使用原本的java名称,所以Java改名为Jakarta,原javax包名也修改为了jakarta
了解这两点后我们回到整合验证码的项目中,首先可以观察到最明显的一点,启动项目后控制台不在打印ja-captcha
的日志了,这就代表自动配置并没有生效,在外部库中找到ja-captcha
的自动配置,发现它是使用factories进行自动配置的,该方法已经失效,我们需要创建新的自动配置文件来启用它
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,所以这个类会找不到
ja-captcha的启动日志,调试接口也成功了
ja-captcha,还是希望作者早日做适配