截止到目前(2023-04-20),Springboot最新穩(wěn)定版本已經(jīng)迭代到3.0.5,而我們項目中使用的行為驗證碼框架aj-captcha
還沒有適配Springboot3,碼云上類似的請求也沒有得到過回應(yīng),于是決定自己動手適配一下,研究下來發(fā)現(xiàn)適配3.x并沒有那么難,這里記錄一下適配過程,希望能幫到他人
首先搭建一個Springboot2的項目,以最簡單的方法整合驗證碼,這里我選擇使用springboot2.7.5
和aj-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-aj-captcha</artifactId>
<version>0.0.1</version>
<description>Springboot3整合aj-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>
可以看到已經(jīng)整合成功了,而且調(diào)用接口測試也一切正常,現(xiàn)在將Springboot版本改成3.0.5
,然后刷新Maven后重啟一下項目試試看,發(fā)現(xiàn)控制臺已經(jīng)不打印aj-captcha
的日志了,而且接口也返回404
在整合之前,我們需要了解一下Springboot3.x的兩個重要的變化
第一個變化是Springboot3以JakartaEE 9為基準(zhǔn)并支持JakartaEE 10,其實Jakarta就是Java,Oracle將JavaEE移交給了Eclipse基金會,并不允許其使用原本的java名稱,所以Java改名為Jakarta,原javax包名也修改為了jakarta
第二個變化是Springboot自動配置文件的變更,Springboot3廢棄了factories的自動配置,改為使用imports文件
了解這兩點后我們回到整合驗證碼的項目中,首先可以觀察到最明顯的一點,啟動項目后控制臺不在打印aj-captcha
的日志了,這就代表自動配置并沒有生效,在外部庫中找到aj-captcha
的自動配置,發(fā)現(xiàn)它是使用factories進行自動配置的,該方法已經(jīng)失效,我們需要創(chuàng)建新的自動配置文件來啟用它
在resource目錄下新建META-INF/spring
兩個目錄,在目錄下添加自動配置文件,并將aj-captcha
的自動配置類添加進去然后重啟項目查看效果,文件名太長我就放在代碼塊中了
# 文件名
org.springframework.boot.autoconfigure.AutoConfiguration.imports
# 文件內(nèi)容
com.anji.captcha.config.AjCaptchaAutoConfiguration
可以看到項目啟動報錯了,不過不用擔(dān)心,報錯是好事兒,說明自動配置生效了,提取報錯中的主要信息,是創(chuàng)建captchaController
這個Bean的時候報錯了,報錯的原因是沒有找到javax/servlet/http/HttpServletRequest
這個類,因為Springboot3中javax的包名統(tǒng)一修改為了jakarta,所以這個類會找不到
這里直接使用替換法簡單粗暴的解決這個問題,找到報錯的這個類,在項目中創(chuàng)建一個相同包名的的類,將里面的javax替換為jakarta,這樣在創(chuàng)建Bean的時候Java找到的類是我們自己的jakarta的類,就不會調(diào)用舊的javax的類了
替換后重啟項目查看效果,可以發(fā)現(xiàn)項目啟動成功,并且控制臺打印了aj-captcha
的啟動日志,調(diào)試接口也成功了,整合完成,點擊查看代碼文章來源:http://www.zghlxwxcb.cn/news/detail-419447.html
本文使用笨方法在Springboot3中使用aj-captcha
,還是希望作者早日做適配文章來源地址http://www.zghlxwxcb.cn/news/detail-419447.html
到了這里,關(guān)于Springboot3整合使用ja-captcha行為驗證碼解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!