✨ Добавлена возможность циклического повторного попытывания при неудачной попытке получения locks в DistributedLock.
✨ Аннотация @Cached
по умолчанию пытается выполнить циклический повтор 3 раза; количество попыток можно изменить через свойство retryCount.
X-Trace-Id
; ранее было traceId
. Обратите внимание на необходимость изменения кода или конфигурации (ballcat.web.trace-id-header-name
).ballcat.log.access.filter-order
для установки приоритета фильтров доступного логирования; значение по умолчанию — -1000.X-Trace-Id
.user
, чтобы они были более нормализованы: sex
заменено на gender
, а phone
— на phone_number
.id
во всех бизнес-таблицах с integer
на long
.Модули: ballcat-common-core, ballcat-common-model, ballcat-common-util
StopWatch
для расчета времени выполнения операцийOAuth2TokenResponseEnhancer
DataPermissionUtils#executeWithDataPermissionRule
### Уведомления DingTalkМодуль: ballcat-spring-boot-starter-grpc
sort
при получении организационной структуры (#252)code
роли, чтобы предотвратить возникновение ошибки базы данных при попытке создания уже существующего кода (#253)id
во всех бизнес-таблицах на Long
sex
в таблице sys_user
на gender
, а также изменения поля phone
на phone_number
flatten-maven-plugin
с версии 1.3.0 до 1.5.0maven-compiler-plugin
с версии 3.10.1 до 3.11.0maven-resource-plugin
с версии 3.3.0 до 3.3.1maven-release-plugin
с версии 3.0.0-M7 до 3.0.0maven-javadoc-plugin
с версии 3.4.1 до 3.5.0maven-source-plugin
с версии 3.2.1 до 3.3.0spring-javaformat-maven-plugin
с версии 0.0.38 до 0.0.39s3-transfer-manager
, так как он теперь выпущен и может быть управляем с помощью s3-bom
SecurityFilterChain
AuthenticationManagerConfiguration
из сервера авторизацииDaoAuthenticationProvider
для аутентификации, чтобы избежать циклической зависимости между AuthenticationManager
и Provider
ballcat.oss.chunked-encoding
, который управляет использованием блочного кодирования при передаче данных, значение по умолчанию — false (#250)DataScope
несовместимо с обновлением; метод getTableNames
изменён на includes
.ballcat.redis.locked-time-out
изменена на ballcat.redis.default-lock-timeout
; значение по умолчанию установлено в 10 секунд.@EnableOauth2ResourceServer
. <!-- Авторизация сервер на основе spring authorization server -->
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-spring-security-oauth2-authorization-server</artifactId>
</dependency>
@org.ballcat.springsecurity.oauth2.server.annotation.EnableOauth2AuthorizationServer
<!-- Устаревший, авторизация сервер на основе spring oauth2 -->
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-auth-controller</artifactId>
<scope>provided</scope>
</dependency>
``` Добавьте аннотацию `@com.hccake.ballcat.auth.annotation.EnableOauth2AuthorizationServer`
/oauth2/token
и /oauth2/revoke
, методы запроса также немного отличаются, обратите внимание на синхронизацию этих изменений в фронтенд частиВ ballcat-spring-security-oauth2-authorization-server: ✨ Используется способ конфигурации accessTokenResponseHandler
для усиления токена, что позволяет применять его ко всем типам grants В涉及时的模块:ballcat-spring-security-oauth2-authorization-server
BallcatOAuth2TokenCustomizer
类,以便更容易地执行远程自我验证令牌操作@EnableOauth2AuthorizationServer
注解明确启用AnonymousForeverAuthenticationProvider
类,用于在使用无效访问令牌时继续处理,并切换到匿名用户OAuth2AuthorizationObjectMapperCustomizer
类,以便更方便地扩展OAuth2Authorization的序列化逻辑Касательно модулей: ballcat-spring-security-oauth2-authorization-server
BallcatOAuth2TokenCustomizer
по умолчанию, чтобы было удобнее выполнять удалённое самопроверение токена@EnableOauth2AuthorizationServer
для явного включенияAnonymousForeverAuthenticationProvider
, который используется для продолжения процесса при использовании неверного токена доступа, но с переключением на анонимного пользователяOAuth2AuthorizationObjectMapperCustomizer
, чтобы было удобнее расширять логику сериализации для OAuth2Authorization### OAuth2 Сервер ресурсов:Модули: ballcat-common-core, ballcat-common-model, ballcat-common-util
BooleanEnum
, теперь он управляет как булевым типом данных, так и соответствующими целочисленными значениями, использует упакованные классы, что делает удобным сравнение через equals без риска получения NullPointerExceptionМодуль: ballcat-common-desensitize
ballcat.redis.locked-time-out
переименована в ballcat.redis.default-lock-timeout
, а значение по умолчанию изменено на 10 секундCacheLock
перемещён в пакет lock
, при этом внутреннее использование redisTemplate
заменено на RedisHelper
DataPermissionUtils#executeAndIgnoreAll
, который позволяет игнорировать права доступа при выполнении метода
DataScope
использует метод includes
для замены оригинального метода getTableNames
, чтобы поддерживать более разнообразные способы проверки необходимости контроля над текущими таблицами
Optional
и Map
в методе LambdaQueryWrapperX#isPresent
NtpCn
для удобства использования внутри страны
Переведём текстовые описания:
Модули: ballcat-common-redis, ballcat-spring-boot-starter-redis
ballcat.redis.locked-time-out
переименована в ballcat.redis.default-lock-timeout
, а значение по умолчанию изменено на 10 секундCacheLock
перемещён в пакет lock
, при этом внутреннее использование redisTemplate
заменено на RedisHelper
DataPermissionUtils#executeAndIgnoreAll
, который позволяет игнорировать права доступа при выполнении метода
DataScope
использует метод includes
для замены оригинального метода getTableNames
, чтобы поддерживать более разнообразные способы проверки необходимости контроля над текущими таблицами
Optional
и Map
в методе LambdaQueryWrapperX#isPresent
NtpCn
для удобства использования внутри страны
Переведём текст на китайском:
模块:ballcat-common-redis, ballcat-spring-boot-starter-redis
ballcat.redis.locked-time-out
更改为ballcat.redis.default-lock-timeout
,默认值变更为10秒CacheLock
移动到包lock
中,并将内部使用的redisTemplate
替换为RedisHelper
DataPermissionUtils#executeAndIgnoreAll
的方法,该方法在执行时可以忽略数据权限
DataScope
使用方法includes
来替代原始方法getTableNames
,以支持更多样化的当前表控制需求验证方式
LambdaQueryWrapperX#isPresent
中增加了对Optional
和Map
空值的检查支持
NtpCn
类
В этой версии был удален конфигурационный фильтр Maven Resource в POM файле ballcat, что может привести к невозможности правильной замены шаблонов @profiles.active@ в файле application.yml. Убедитесь, что вы добавили соответствующую конфигурацию Maven Resource Filter в свой POM.xml файл.
Дополнительная информация доступна здесь: Конфигурация Maven Placeholders
Включает модуль: ballcat-spring-boot-starter-job
Включает модуль: ballcat-spring-boot-starter-ip2region
Включает модули: ballcat-common-redis, ballcat-spring-boot-starter-redis
Включает модуль: ballcat-spring-boot-starter-datascope
Включает модуль: ballcat-spring-boot-starter-easyexcel
Этот выпуск убрал аннотации @EnableAccessLog
и @EnableOperationLog
. Теперь доступные и операционные логи включены по умолчанию; пользователи могут отключить их с помощью конфигураций ballcat.log.access.enabled=false
и ballcat.log.operation.enabled=false
.
AbstractIdTreeNode
, чтобы предотвратить возможные проблемы из-за неправильного использования пользователямиOssClient
OssTemplate
domain
; заменено на endpoint
. Свойство endpoint
совместимо с конечной точкой и пользовательским доменомendpoint
должна содержать протокол, например: http://s3-cn-east-1.qiniucs.com
rootPath
(заменено на object-key-prefix
)ballcat
для конфигураций xxl-jobjavax
на jakarta
spring-boot-configuration-processor
pom.xml
. Зависимости и модули расположены в алфавитном порядкеNullPointerException
при одновременном удалении роли несколькими администраторами Встроен дефолтный конфигурационный класс логгера, который внедряет различные процессоры входа в зависимости от используемого сервера авторизации
### Компонент Redis
Включает модули: ballcat-common-redis и ballcat-spring-boot-starter-redis
@CacheDel
была расширена до повторяемой аннотацииRedisHelper
с временем жизни теперь поддерживают единицы измерения времени@CacheDel
добавила атрибут allEntries
, позволяющий удалять все ключи одного пространства имён
WrapperX
добавлена методика lambdaUpdate
Прикрепленные модули: ballcat-extend-openapi
SpringUtils
добавлен метод publishEvent
для публикации событийvalidate
с использованием {}
вместо дефолтного сообщения
SystemResultCode
добавлены некоторые часто используемые коды состоянияextendObj
в SelectData
на attributes
TreeNode
, использование key
и parentKey
как связывающих свойств между родителем и дочерними узлами, что делает его более универсальнымTreeUtils#forEachDFS
для глубинной первичной обработки узлов дерева
ballcat-spring-boot-starter-ip2region
для удобной быстрой интеграции с Ip2region
xxl-job
с добавлением префикса ballcat
xxl-job
@EnableXxlJob
. Теперь пользователи могут отключить использование xxl-job
путем установки значения ballcat.xxl.job.enabled
равным false
### Компонент idempotenceKeyGenerator
на IdempotentKeyGenerator
для предотвращения конфликта названий при регистрации
Прикрепленные модули: ballcat-spring-boot-starter-oss
domain
(можно использовать свойство endpoint
)endpoint
требует указания протоколаrootPath
(можно использовать свойство object-key-prefix
)enabled
для управления активностью OSSOssTemplate
для замены исходного компонента OssClient
ObjectWithGlobalKeyPrefixOssTemplate
для поддержки глобального префикса ключа, настроенного в OssClient
ballcat-common-security
ballcat-security-core
, валидатор CAPTCHA перемещён сюда для удобства повторного использованияballcat.security.oauth2.resourceserver.ignore-urls
AuthenticationManager
регистрируется сервером авторизации ### ballcat-authВключает компонент: ballcat-spring-boot-starter-excel
DefaultAnalysisEventListener
, чтобы указывать количество строк заголовков при импорте Excel@RequestExcel
Включает модуль: ballcat-spring-boot-starter-web
application/json;charset=UTF-8
для content-type
PageParamArgumentResolverSupport
additional-spring-configuration-metadata.json
ApplicationContext
в SpringUtils
LoginLogUtils
LogUtils
## 🔨 ЗависимостиИнвовлвенные модули: ballcat-common-core ballcat-common-util
getPollTimeoutMs
класса AbstractQueueThread
, что позволяет его переопределить в производных классахAbstractTimer
для работы с таймерамиИнвовлвенные модули: ballcat-common-websocket ballcat-spring-boot-starter-websocket
RocketMQ
как системы распределения сообщенийИнвовлвенные модули: ballcat-common-redis ballcat-spring-boot-starter-redis
RedisScript
в классе CacheLock
для предотвращения генерации различных значений SHARedisHelper
в соответствии с названиями команд RedisRedisHelper
Инвовлвенные модули: ballcat-extend-openapi- 🐛 Исправлено ограничение на добавление нескольких параметров сортировки при использовании пагинации в Swagger UI
Инвовлвенные модули: ballcat-common-log ballcat-log-biz ballcat-spring-boot-starter-log
Инвовлвенные модули: ballcat-extend-mybatis-plus
page
. Внимание пользователям фронтенда: требуется соответствующее обновление. Также можно использовать конфигурацию ballcat.pageable.page-parameter-name
, чтобы переопределить имя параметра на current
.ballcat.upms
перемещена в ballcat.system
ballcat.web.max-page-size
теперь называется ballcat.pageable.max-page-size
@SneakyThrows
теперь можно указывать типы исключений явно.AutoConfiguration.imports
.spring.factories
)remark
в resultMap объекта I18nData
.@I18nField
теперь поддерживает использование SPEL выражений для значения поля code
.@I18nIgnore
, которая может применяться к методам контроллеров для игнорирования процесса локализации.⚡ Оптимизация способа создания объекта DataPermissionRule
, добавлен конструктор с параметрами и поддержка цепочечного вызова.
⚡ Вынесены методы программного управления правами доступа из экземпляров DataPermissionHandler
в статический метод DataPermissionUtils
, что делает их проще в использовании.
🐞 Исправлена ошибка возникшая при выполнении SQL запроса внутри DataScope
, связанная с пустым значением счетчика совпадений.
✅ Добавлен тест для таблицы с псевдонимом с использованием jsqlparse ### Изменения связанные с паролями ballcat-system ballcat-auth ballcat-common-security
🌟 При создании нового пользователя системы или изменении его пароля используется PasswordEncoder
для шифрования паролей, что позволяет легко менять алгоритмы шифрования.
🌟 Теперь регулярное выражение для проверки паролей системы можно настроить через конфигурацию YAML: ballcat.system.password-rule
🔥 Удалены методы encode
и matches
в PasswordUtils
, чтобы предотвратить неправильное использование пользователями.
🎨 Метод PasswordUtils#createDelegatingPasswordEncoder
сделан публичным для удобства внешнего вызова.
🎨 Улучшено сообщение об ошибке при смене пароля.### Разделение запросов ballcat-spring-boot-starter-web ballcat-common-model
🌟 Поддержка параметров сортировки с использованием конечной скобки []
. Например, sort
и sort[]
могут использоваться как параметры сортировки.
🎨 По умолчанию текущий номер страницы переименован с current
на page
. В будущих версиях свойство current
будет удалено из PageParam
.
🌟 Поддержка пользовательских имен параметров пагинации:
ballcat:
pageable:
page-parameter-name: page # если вы не хотите менять фронтенд, можно установить значение current
size-parameter-name: size
sort-parameter-name: sort # также будут автоматически поддерживаться параметры с конечной скобкой [], например sort[]
max-page-size: 100
LambdaAliasQueryWrapperX
.LambdaAliasQueryX
.OtherTableColumnAliasFunction
переименован в ColumnFunction
.ColumnFunction::create
, который упрощает создание полей таблиц при выполнении соединений.### Валидаторы@OneOfStrings
проверяет, является ли значение одним из указанных строк.@OneOfInts
проверяет, является ли значение одним из указанных целых чисел.@OneOfClasses
проверяет, является ли значение одним из указанных типов классов.@ValueOfEnum
проверяет, удовлетворяет ли значение указанному значению Enum.from
. ## 🔨 Зависимости
- 【Удалено】Удалена зависимость от spring-boot-admin
- 【Изменено】Отменено принудительное удаление Tomcat в spring-boot-starter-web; выбор контейнера передается пользователю
- 【Обновлено】spring-boot с версии 2.6.6 до 2.7.1
- 【Обновлено】kafka с версии 2.5.0 до 2.6.3
- 【Обновлено】dynamic-datasource-spring-boot-starter с версии 3.5.0 до 3.5.1
- 【Обновлено】hutool с версии 5.7.22 до 5.8.3
- 【Обновлено】fastjson с версии 1.2.79 до 1.2.80
- 【Обновлено】springdoc-openapi с версии 1.6.7 до 1.6.9
- 【Обновлено】mybatis с версии 3.5.9 до 3.5.10
- 【Обновлено】mybatis-plus с версии 3.5.1 до 3.5.2
- 【Обновлено】xxl-job с версии 2.3.0 до 2.3.1
- 【Обновлено】easyexcel с версии 3.0.5 до 3.1.1```
AbstractJsonWebSocketMessage
было изменено на JsonWebSocketMessage
. При возникновении ошибки импорта класса во время обновления, убедитесь, что вы также изменили название класса.java-baseline=8
```## ⭐ Новые возможности
BusinessException
потеряется запись traceId
в логах.parameterMap
в CustomAccessLogHandler#getParams
.TreeUtils
добавлен метод обрезки дерева pruneTree
TreeUtils
getChildren
в SimpleTreeNode
, что позволяет удобно получать данные нужного типаdeque
в DataPermissionAnnotationHolder
, теперь также выполняется удаление@DataPermission
Приоритет правил управления правами доступа от высшего к низшему:
- Программное правило
- Аннотация правила текущего метода
- Аннотация правила текущего класса
- Правила управления правами доступа используемые вызывающим объектом
- Глобальное правило по умолчанию
UserSessionKeyGenerator
, чтобы сделать его более удобным для замены- 🌟 Изменение роли хранителя сессии WebSocket с WebSocketSessionHolder
на WebSocketSessionStore
AbstractMessageDistributor
, который содержит методы по умолчанию из MessageDistributor
allowed-origin-patterns
для конфигурирования CORSRedisMessageListener
, чтобы предотвратить ошибки регистрации beans из-за случайного сканированияJsonWebSocketMessage
, переименование абстрактного класса AbstractJsonWebSocketMessage
в JsonWebSocketMessage
ProviderManager
, чтобы решить проблему двойного исключения при неверном токене аутентификацииJsonDesensitizeModule
для поддержки деинициализации Jackson.CustomJavaTimeModule
для предотвращения его замены модулем JavaTimeModule
JSR310.IPageArgumentResolver
для декомпозиции модулей starter-web
и mybatis-plus
.Lov
.Swagger2
в OpenAPI3
.springfox
на springdoc-openapi
.@ParameterObject
для классов запросов GET
, чтобы правильно отображать параметры запроса в документах.springfox
давно не обновляется, удалён компонент ballcat-spring-boot-starter-swagger
на основе этого фреймворка.ballcat-extend-openapi
, основанный на springdoc-openapi
с некоторыми расширениями. Подробнее см. документацию.knife4j-ui
.SonarLint
.pluginManagement
в pom dependencies
.hutool
изменено на использование официального bom hutool
.ballcat-extend-tesseract
для вызова библиотек OCR.StreamUtils
. Теперь используется FileOutputStream
, чтобы гарантировать, что большие файлы не вызывают ошибку недостатка памяти.OssDisabledException
теперь расширяет RuntimeException
вместо Exception
.stringRedisTemplate
в RedisIdempotentKeyStore
теперь передается через конструктор.@Component
в аспекте IdempotentAspect
, чтобы избежать случайной регистрации.## 🐞 Исправления ошибокFileUtils#updateTmpDir
была исправлена.saveBatchSomeColumn
на saveBatch
, обратите внимание на конфигурацию jdbcUrl проекта, требуется добавление условия rewriteBatchedStatements=true
, иначе скорость вставки будет снижена## ⭐ Новые возможностиLogicDeletedBaseEntity
, обеспечивающий единое поддержание логического удаленияsaveBatchSomeColumn
на saveBatch
. По результатам тестирования, при активации транзакций массового внесения данных и добавлении rewriteBatchedStatements=true
в jdbcUrl, циклические операции вставки через insert into
оказываются быстрее, чем использование синтаксиса insert into values
.TreeUtils#treeToList()
, который позволяет преобразовать дерево в списокImageUtils#mixResolveClone()
, который использует быстрое решение, если это не работает, переходит к обычному решениюFileUtils
BaseEntity
и LogicDeletedBaseEntity
DistributeLock
, позволяющий удобнее использовать распределённые блокировкиAbstractMessageEventListener
, предоставляющий дефолтное решение сериализации сообщенийExtendService#saveBatch()
- 【Добавлено】 Поддержка многопоточной отправки одного и того же WebSocket-сеансаMetaObjectHandler
TokenGrantBuilder#getAuthenticationManager()
, который позволяет легко получить AuthenticationManager при наследовании от подкласса (#133)FileService
: OssClient больше не является обязательной зависимостью; когда нет конфигурации Oss, используется по умолчанию FileClient, работающий либо с локальным хранением, либо согласно конфигурацииWITHOUT_MAPPED_STATEMENT_ID_MAP
класса MappedStatementIdsWithoutDataScope
изменён на ConcurrentHashMap
TraceIdFilter
теперь возвращает параметр traceId в заголовках ответа для удобства диагностики проблемUserInfoCoordinator
был изменён на интерфейс и предоставляет дефолтную реализацию DefaultUserInfoCoordinatorImpl
## 🐞 Исправленные ошибки@DataPermission
при использовании JDK динамического прокси или метода моста в данных о правах доступаballcat.swagger.enabled=false
PlainTextMessageHandler
roles
, теперь используется roleCodes
; обратите внимание на соответствующее обновление в клиентской части.local
для распределения по умолчанию, что может привести к ошибкам отправки данных в режиме кластера; если требуется развертывание в кластере, пожалуйста, измените соответствующие конфигурации.MessageSender
были удалены: этот интерфейс был объединён с MessageDistributor
; обратите внимание на изменения типа зависимости.## ДобавленоAccessTokenConverter
, чтобы изменить возвращаемое значение конечной точки самопроверки /check_token
.TokenGrantBuilder
.AuthenticationProvider
для удобства работы с пользовательским grant_type.{ active: false }
, а не 400.Instant
в сериализацию времени Jackson по умолчанию, чтобы предотвратить возникновение ошибки InvalidDefinitionException при работе с типом java.time.Instant
.Исправлено:
ClientPrincipal
.\
) в имени таблицы.DataScopeHolder
был преобразован в приватный внутренний класс DataScopeSqlProcessor
.value
в объекте SelectData
на тип Object
, а также изменение типов полей selected
и disabled
на тип Boolean
.TokenAttributeNameConstants
.UserInfoDTO
. Добавлено новое свойство menus
для хранения объектов меню, которое принадлежит пользователю.Поле roles
было переименовано и теперь используется для хранения объектов ролей, а старое поле roles
стало называться roleCodes
и используется для хранения набора значений ролей.roles
в ответах от конечной точки входа и конечной точки самоидентификации было заменено на roleCodes
.UserOrganizationChangeEvent
.UserChangeEvent
на UserCreatedEvent
.biz
в модуль model
.MessageSender
, который был объединен с распределителем сообщений MessageDistributor
.ballcat.websocket.message-distributor
на redis
или custom
, где значение custom
позволяет пользователю самостоятельно настроить распределитель сообщений (MessageDistributor
) (например, использовать MQ для повышения надежности).ballcat:
websocket:
``` # По умолчанию установлено значение 'local', поддерживающее работу только одного узла; 'redis' использует модель подписки/публикации для работы в кластере
message-distributor: redis # local | redis | custom
AddMessageEventListenerToContainer
, чтобы предотвратить проблемы с порядком загрузки, вызванные настройками сканирования пакетов пользователем.MessageEventListener
в модуле ballcat-common-redis для работы с PUB/SUB, все реализации этого интерфейса будут автоматически зарегистрированы в модуле ballcat-spring-boot-starter-redis.multiDel
в аннотацию @CacheDel
, что позволяет удобно выполнять массовое удаление кэша.{}
вместо defaultMessage
для сообщений проверки через hibernate-validation.CreateGroup
и UpdateGroup
по умолчанию для удобства групповой проверки.spring-boot-starter-web
, использует Undertow в качестве встроенного сервера по умолчанию, а также усиливает конфигурацию web-приложений из ballcat-common-conf, такие как глобальное управление исключениями, защита от SQL-инъекций, настройки Jackson по умолчанию и т. д. - Для поддержки условий запроса с соединением таблиц добавлен интерфейс OtherTableColumnAliasFunction
в модуль ballcat-extend-mybatis-plus, что позволяет использовать LambdaAliasQueryWrapperX
для создания условий запроса к связанным таблицам.{}
для замещения местоположений, пример использования можно найти в I18nData.basePackage
в конфигурациях модуля ballcat-spring-boot-starter-swagger.@DataPermission
для использования вне мапперов в модуле ballcat-spring-boot-starter-datascope, а также поддержка различных окружений @DataPermission
при вложенных вызовах методов.SpELUtils
переименован в SpelUtils
и перемещён в модуль ballcat-common-util.ApplicationContextHolder
переименован в SpringUtils
и перемещён в модуль ballcat-common-util.ballcat.upms.````markdown loginCaptchaEnabled
была изменена на ballcat.security.oauth2.authorizationserver.
loginCaptchaEnabled
, чтобы контролировать включение/отключение капчи при входеballcat.security.ignoreUrls
теперь изменена на ballcat.security.oauth2.resourceserver.ignoreUrls
, чтобы контролировать игнорирование аутентификации для некоторых URL в сервере ресурсовballcat.security.iframeDeny
теперь изменена на ballcat.security.oauth2.resourceserver.iframeDeny
, чтобы активировать разрешение встраивания iframe в сервере ресурсов@EnableOauth2AuthorizationServer
, чтобы активировать сервер авторизации (по умолчанию активирована в модуле ballcat-admin-core)- Удалён ballcat-oauth-model, связанный код перемещён в ballcat-common-security
### Взаимозависимости
- Обновление spring-boot с версии 2.4.3 до 2.4.8
- Knife4j с версии 2.0.8 до 2.0.9
- Hutool с версии 5.5.8 до 5.7.3
- Fastjson с версии 1.2.75 до 1.2.76
- Dynamic-datasource с версии 3.3.1 до 3.3.2
- Spring-boot-admin с версии 2.4.1 до 2.4.2
- Anji-captcha с версии 1.2.8 до 1.2.9