SpringBoot2.7 по-прежнему своенравен, но не поддерживает Logback1.3. Что делать?
SpringBoot2.7 по-прежнему своенравен, но не поддерживает Logback1.3. Что делать?

Уязвимость безопасности

Отдел тестирования компании будет регулярно сканировать код на предмет обнаружения Уязвимости. безопасности,Экспорт Excelпомещатьприезжатьгруппа,Лицо, ответственное за каждый проект, несет ответственность за его исправление (обновление версии компонента).,По каким-то причинам не подлежит ремонту,нужно указать причины(Некоторые версии компонентовполагатьсявышеиз JDK версия, в то время как JDK Его нельзя продвигать). Проект, за который я отвечаю, основан на Spring Boot 2.7.18,этополагатьсяиз logback версия 1.2.12,существовать Уязвимость безопасности CVE-2023-6378

CVE-2023-6378
CVE-2023-6378

Я действительно отказываюсь исправлять эту вещь.,При ремонте нужно оценить точки удара,При тестировании необходимо охватить все: обновление основных компонентов — это не что иное, как рефакторинг;,Разработка и тестирование должны быть полностью измерены. Ключевые моментыда,Ремонт не учитывается как выпуск продукции.,Если он сломан, вам придется взять на себя вину.,Я могудаиспытал кровьизурокиз:Мне сказали по возможности не двигаться. Если вам придется внести коррективы, может случиться производственная авария.,В любом случае, я все еще говорю, что да

Если вы не можете двигаться, не двигайтесь. Если вы сделаете улучшения, производительности не будет. Если возникнут проблемы, вам придется взять на себя вину. Это неблагодарно, но это не значит, что вы не можете убежать. .

Даже если я не хочу,но тоже пришлось ремонтировать,Компания придает большое значение Уязвимость безопасности.,В конце концов, вы должны оставить своим клиентам очень профессиональный имидж. Поскольку нет способа избежать этого,Тогда примите это спокойно,Полная оценка точек воздействия,Сделайте комплексный тест

Просто сделай это и все закончится
Просто сделай это и все закончится

Исправления ошибок

Как это исправить, должен знать каждый, удали spring-boot-starter-logging Зависимости: введите новые зависимости версий, как показано ниже.

Язык кода:javascript
копировать
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>${logback.version}</version>
</dependency>

обновить Какая версия до заслуживает внимательного рассмотрения. В любом случае вам придется обновиться, так почему бы не обновить до Последняя версия?Уязвимость Безопасности мало, да и лазеек пока нет. Это тоже неправда, потому что logback полагаться JDK Версия,чиновникИнструкции следующие

logbackиjdk отношения
logbackиjdk отношения

Потому что проект опираетсяиз JDK версия 8, так что будем logback обновить до 1.3 из Последняя версияданаиболее подходящийиз;logback 1.3.x полагатьсяиз SLF4J версия 2.0.x,такфинальный pom.xml Отрегулируйте следующим образом

Язык кода:javascript
копировать
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <logback.version>1.3.14</logback.version>
    <slf4j.version>2.0.7</slf4j.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>spring-boot-starter-logging</artifactId>
                <groupId>org.springframework.boot</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
</dependencies>
logback1.3.14
logback1.3.14

Кажется довольно простым, не так ли? Никаких ошибок при компиляции не сообщается, после запуска все проходит гладко, что самое неприятное; bug Вот оно

Язык кода:javascript
копировать
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:304)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:238)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
	at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:79)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:56)
	at java.util.ArrayList.forEach(ArrayList.java:1249)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
	at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:56)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:299)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
	at com.qsl.Application.main(Application.java:15)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 17 more

Что ты будешь делать в это время? В духе быстрого решения bug В принципе, мы можем проверить проблему только онлайн.

java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder

Посмотрите, сможете ли вы найти решение; но после всей проверки проблема не может быть решена после различных попыток, если проблема не решена. logback версия понижена до 1.2.x,Может быть последнимиз 1.2.13 да Есть довольно много Уязвимость безопасностииз

уязвимость logback1.2.13
уязвимость logback1.2.13

Тогда нет другого пути, кроме как отследить причину проблемы. Если вы найдете причину, вы сможете назначить подходящее лекарство. Проблема возникает снова: как проверить причину? Самый прямой и эффективный способ — начать с информации о стеке исключений.

стек исключений
стек исключений

щелчок левой кнопкой мыши LogbackLoggingSystem.java:304,тогда приходиприезжать spring-boot-2.7.18 исходный код

LogbackLoggingSystem_304
LogbackLoggingSystem_304

Используется здесь StaticLoggerBinder,Скольжение вверх LogbackLoggingSystem изimport часть,StaticLoggerBinder Полный путь к классу:

org.slf4j.impl.StaticLoggerBinder

logback 1.2.12 есть такой класс

logback1.2.12_StaticLoggerBinder
logback1.2.12_StaticLoggerBinder

но logback 1.3.14 Мало того, что этого класса не существует, так еще и есть org Пакеты больше не существуют

logback1.3.14_StaticLoggerBinder не существует
logback1.3.14_StaticLoggerBinder не существует

Итак, причина найдена?

spring-boot-2.7.18 полагаться org.slf4j.impl.StaticLoggerBinder, в то время как logback 1.3.14 Нет такого класса

Так как же назначить правильное лекарство? Не только ты в замешательстве, я тоже в замешательстве

глупый
глупый

Скорректируйте свое мышление. Мы точно не первые, кто столкнулся с этой проблемой, верно? spring-boot Официальный вопрос, давайте поищем org/slf4j/impl/StaticLoggerBinder

springboot2.7.xНетподдерживатьlogback1.3.x
springboot2.7.xНетподдерживатьlogback1.3.x

Нажмите,Есть официальные ответы,Я даю это всемпереводитьодин раз;спрашивающийда LSmyrnaios,Он дал некоторую предысторию

logback 1.3.x на основе Java 8,1.4.x на основе Java-11, в то время как Spring Boot только в 3.x.x Интегрировано в logback 1.4.x(на основе Java-11) Java-8 Пользователь забыт в соответствии с logback Документация, журнал регистрации Поддерживать одновременно 1.3.x и 1.4.x, то есть вход в систему 1.3.x да 'активный', Весна Boot 2.7.x следует интегрировать это Рассмотрим следующий случай: У меня есть приложение Java-8, которое использует logback v.1.3.6, работает без проблем Теперь я хочу интегрировать приложение в Spring Boot v.2.7.9, при запуске возникает следующая ошибка: (Стек исключений такой же, как и тот, с которым мы столкнулись, поэтому он не показан) похоже на да Spring Boot Использовал slf4j 1.7.x,нода logback 1.3.x Использовал slf4j 2.0.x, так что StaticLoggerBinder Класс отсутствует Итак, вы можете Spring Boot >= 2.7.x and < 3 Поддерживается в версии logback 1.3.x ? Заранее спасибо.

Похоже на это,У этого парня та же проблема, что и у нас, с трудоустройством.,предложить из Требования такие же, как и у нас.,да Не да Смотри приехать из надежды?

чиновник scottfrederick дал ответ

Скотт Фредерик ответил
Скотт Фредерик ответил

переводить Просто придида

LSmyrnaios Спасибо за ваш контакт. Spring Boot 2.7.x полагаться Logback 1.2.x。 Уже вСторонняя политика обновленияобъяснено в,我们Нет会在 2.7.x Обновление с версии Вернитесь в 1.3.х. Как вы упомянули, мы собираемся не просто обновить Logback приезжать 1.3.x, вам также необходимо SLF4J обновить до 2.0.x, вот вопрос, почему мы этого не делаем 2.7.x обновлениеизобсуждать,Итак, мы выпускаем патчи

Инструкции по обновлению сторонних провайдеров следующие:

Third-party dependencies
Third-party dependencies

Проще говоря, да: сторонние зависимости от уровня исправления, которые могут быть Spring Boot из Обновление в патчной версии, при этом обновление сторонних опирается на минорную или мажорную версию из может быть выполнено только в Spring Boot обновление с минорной или основной версии. Не могу быть там Spring Boot из Обновление сторонней версии осуществляется из минорной или мажорной версии в патч-версии. Здесь под патч-версией можно понимать минорную версию, то есть да 1.2.x в x,И второстепенные или важные версии,нода 1.x.x в первую очередь x,Это то, что мы называем большой версией

о scottfrederick,他可Нетда Spring Boot обычного Contributor,Его можно причислить к шестому брату в списке.

Список шесть
Список шесть

он сказализвозвращатьсяда Очень авторитетныйиз;о Он упомянулприезжатьизобсуждать,будем смотреть позже,Сначала поставь токиз Закончил чтение。спрашивающий LSmyrnaios Сказал снова

Дополнение LSmyrnaios
Дополнение LSmyrnaios

переводить Просто придида

Скотт Фредерик, мы просто пошли обсуждать, и я хотел спросить Изду, можно ли да Spring Boot Следующая большая версия (например. 2.8.0, если планируется) будет SLF4J обновить до 2.0.x,logback обновить до 1.3.x Это для большого количества Java 8 Очень важно для пользователей, которым нужны последние новости безопасности и исправления ошибок для своих производственных систем. заранее спасибо

scottfrederick объяснятьиз Нам это очень подходитизожидать,Давайте посмотрим вниз。wilkinsona дал ответ

Уилкинсонответить
Уилкинсонответить

переводить Просто придида

В настоящее время планов по выпуску Spring Boot 2.8 нет.

Слова лаконичны и лаконичны, но основной посыл таков: да. Spring Boot 2.x.x Сразуда Нетподдерживать Logback 1.3.x,полныйиз Волевой и сексуальный。тыда Нетдамне интересно это своеволиеиз Чувакда ВОЗ?Люди могутда Spring Boot Лучший брат в списке! ! !

Большой брат
Большой брат

Тебе не кажется, что для него естественно быть своенравным? Давайте продолжим смотреть вниз,ASarco Сказал что-то

ASarco
ASarco

переводить Просто придида

Теперь вопрос logback 1.2.12 существовать Уязвимость безопасности CVE-2023-6378, для 2.7.x пользователей Shabi не имеют вывода

Этот парень выразил свой гнев,Все они идут прямо к национальной квинтэссенции(SB)Понятно,Тогда да очень злится.

SB да Spring Boot Аббревиатура не является квинтэссенцией китайской нации. Не вводите себя в заблуждение! ! !

против ASarco Вопрос, кто-то дал ответ позже, можно обновить Logback приезжать 1.2.13 чтобы исправить уязвимость cve-2023-6378,И у нас нет выбора,может быть только Logback от 1.3.14 降приезжать 1.2.13,финальныйиз pom.xml Как показано ниже

Язык кода:javascript
копировать
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<logback.version>1.2.13</logback.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>spring-boot-starter-logging</artifactId>
                <groupId>org.springframework.boot</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
    </dependency>
</dependencies>

так,1.2.13 из Уязвимость Безопасность все еще существует. Мы объясним это следующим образом после сканирования в следующий раз.

Не исправить, Весна. Boot 2.7.x Официально не планирую поддерживать Logback 1.3.x, если не обновлено Spring Boot приезжать 3.x.x (Интегрированное изда Logback 1.4.x), вам также необходимо JDK обновить до 11

обсуждать

возвращаться记得前面提приезжатьизчтообсуждать?,Потому что это длиннее,Позвольте мне выделить для вас несколько ключевых моментов.

1、wilkinsona Упомянутое приезжать Logback один раз commit,这次提交移除Понятно StaticLoggerBinder

StaticLoggerBinder удаляет записи
StaticLoggerBinder удаляет записи

от 1.3.0-alpha0 Версия была удалена StaticLoggerBinder,так Spring Boot 2.7.x не может быть интегрирован Logback 1.3.x любая версия

2、snicoll (Второй брат в списке) Упомянутое приезжать Очень важныйизточка

snicoll_обсуждать
snicoll_обсуждать

Spring Boot из LoggingSystem да можно отключить или изменить из

-Dorg.springframework.boot.logging.LoggingSystem=none

3、wilkinsona Упомянутое приезжать spring.factories в ApplicationListener,Его приоритет выше, чем org.springframework.boot.context.logging.LoggingApplicationListener,Может использоваться для установки свойств системы в ответ на ApplicationStartingEvent

4、wilkinsona против cmuchinsky предложить из

для spring boot 2.7, да можно ли обновить ogbackLoggingSystemlogback быть совместимым Logback 1.3 и 1.2, например отражение

дал ответ, что считает это маловероятным и поддерживает Logback 1.4 Требуемые изменения слишком обширны, чтобы их можно было параллелизировать путем отражения 1.2 и 1.3/1.4

5、zhaolj214 Прочитав исходный код, я нашел решение.

Язык кода:javascript
копировать
@SpringBootApplication
public class Spring5Application {
    public static void main(String[] args) {
        System.setProperty("org.springframework.boot.logging.LoggingSystem", "none");
        SpringApplication.run(Spring5Application.class, args);
    }
}

А насчет того, правильно это или нет, мы попробуем еще раз в следующей статье.

6、wilkinsona объяснять明Понятно可以自定义日志:howto.logging

Подвести итог下来Сразуда:против Spring Boot 2.7.x,чиновникне поддержит Logback 1.3.x,новозвращатьсяда Может быть настроен поизпуть впередподдерживать Logback 1.3.x,Как настроить,и насколько это эффективно,Давайте послушаем разбивку в следующий раз

Подвести итог

  1. Logback 1.3 полагаться JDK 8,1.4 полагаться JDK 11;Spring Boot 2.7.x полагаться Logback 1.2.x,и 3.x.x полагаться Logback 1.4.x。也Сразуобъяснять Spring Boot пропущен Logback 1.3.x
  2. Spring Boot Чиновник также дал ответ, в соответствии Политика сторонних рекомендаций (обновление минорной версии до минорной версии, обновление основной версии до мажорной версии), 2.7.x не поддержит Logback 1.3.x,и 3.x.x просто поддержите напрямую Logback 1.4.x
  3. Должен Spring Boot 2.7.x поддерживать Logback 1.3.x 也Нетда Нет可以,Необходимо настроить конфигурацию,Есть еще некоторые ограничения,Более подробную информацию можно найти в следующей статье.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose