
Репозиторий Spring Cloud Gateway, демонстрирующий эксплуатацию CVE-2022-22947 для тестирования безопасности API и анализа уязвимостей.
//// НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ. ОН БЫЛ СГЕНЕРИРОВАН. Ручные изменения этого файла будут потеряны при его повторной генерации. Вместо этого редактируйте файлы в каталоге src/main/asciidoc/. ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-gateway/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-gateway/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-gateway/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-gateway/branch/master"] image::https://api.codacy.com/project/badge/Grade/a6885a06921e4f72a0df0b7aabd6d118["Codacy code quality", link="https://www.codacy.com/app/spring-cloud/spring-cloud-gateway?utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-gateway&utm_campaign=Badge_Grade"]
Этот проект предоставляет API-шлюз, построенный на основе экосистемы Spring, включая: Spring 5, Spring Boot 2 и Project Reactor. Spring Cloud Gateway призван предоставить простой, но эффективный способ маршрутизации к API и реализации сквозных функций, таких как: безопасность, мониторинг/метрики и отказоустойчивость.
== Возможности
DiscoveryClient от Spring Cloud для настройки маршрутов== Сборка
:jdkversion: 1.8
=== Основная компиляция и тестирование
Для сборки исходного кода вам потребуется установить JDK {jdkversion}.
Spring Cloud использует Maven для большинства действий, связанных со сборкой, и вы должны быстро приступить к работе, клонировав интересующий вас проект и выполнив
ПРИМЕЧАНИЕ: Вы также можете установить Maven (>=3.3.3) самостоятельно и запускать команду mvn
вместо ./mvnw в приведённых ниже примерах. Если вы это сделаете, вам также
может потребоваться добавить -P spring, если ваши локальные настройки Maven не
содержат объявлений репозиториев для предварительных артефактов Spring.
ПРИМЕЧАНИЕ: Имейте в виду, что вам может потребоваться увеличить объём памяти,
доступной для Maven, установив переменную окружения MAVEN_OPTS со
значением, например, -Xmx512m -XX:MaxPermSize=128m. Мы стараемся учесть это в
конфигурации .mvn, поэтому если вы обнаружите, что вам приходится делать это для успешной сборки,
пожалуйста, создайте тикет, чтобы эти настройки были добавлены в систему контроля версий.
Проекты, требующие промежуточного ПО (например, Redis) для тестирования, как правило, требуют, чтобы локальный экземпляр Docker был установлен и запущен.
=== Документация
Модуль spring-cloud-build имеет профиль "docs", и если вы его
включите, он попытается собрать asciidoc-исходники из
src/main/asciidoc. В рамках этого процесса он будет искать
README.adoc и обрабатывать его, загружая все включения, но не
разбирая и не отображая его, а просто копируя в ${main.basedir}
(по умолчанию ${basedir}, т.е. корень проекта). Если в README
произойдут какие-либо изменения, они отобразятся после сборки Maven как
изменённый файл в нужном месте. Просто зафиксируйте изменения и отправьте их.
=== Работа с кодом Если у вас нет предпочтений по IDE, мы рекомендуем использовать https://www.springsource.com/developer/sts[Spring Tools Suite] или https://eclipse.org[Eclipse] при работе с кодом. Мы используем плагин https://eclipse.org/m2e/[m2eclipse] для поддержки Maven. Другие IDE и инструменты также должны работать без проблем, если они используют Maven 3.3.3 или новее.
==== Активация профиля Spring Maven Проекты Spring Cloud требуют активации профиля Maven 'spring' для разрешения репозиториев milestone и snapshot Spring. Используйте предпочитаемую IDE для установки этого профиля как активного, иначе могут возникнуть ошибки сборки.
==== Импорт в Eclipse с помощью m2eclipse Мы рекомендуем плагин https://eclipse.org/m2e/[m2eclipse] при работе с Eclipse. Если у вас ещё не установлен m2eclipse, его можно найти в "Eclipse Marketplace".
ПРИМЕЧАНИЕ: Старые версии m2e не поддерживают Maven 3.3, поэтому после
импорта проектов в Eclipse вам также потребуется указать
m2eclipse использовать правильный профиль для проектов. Если вы
видите много различных ошибок, связанных с POM в проектах, проверьте,
что у вас установлена последняя версия. Если вы не можете обновить m2e,
добавьте профиль "spring" в ваш settings.xml. В качестве альтернативы вы можете
скопировать настройки репозиториев из профиля "spring" родительского POM
в ваш settings.xml.
==== Импорт в Eclipse без m2eclipse Если вы предпочитаете не использовать m2eclipse, вы можете сгенерировать метаданные проекта Eclipse с помощью следующей команды:
$ ./mvnw eclipse:eclipse
Сгенерированные проекты Eclipse можно импортировать, выбрав import existing projects
из меню file.
== Участие в разработке
:spring-cloud-build-branch: master
Spring Cloud выпускается под неограничивающей лицензией Apache 2.0 и следует стандартному процессу разработки Github, используя Github Tracker для отслеживания проблем и слияния pull request в master. Если вы хотите внести даже самый тривиальный вклад, не стесняйтесь, но следуйте приведённым ниже рекомендациям.
=== Подписание лицензионного соглашения с участником Прежде чем мы примем нетривиальный патч или pull request, вам потребуется подписать https://cla.pivotal.io/sign/spring[Contributor License Agreement]. Подписание соглашения участника не предоставляет никому прав на коммиты в основной репозиторий, но означает, что мы можем принять ваши изменения, и вы получите авторский кредит, если мы это сделаем. Активным участникам может быть предложено присоединиться к основной команде и получить возможность объединять pull request.
=== Кодекс поведения Этот проект придерживается https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[кодекса поведения] Contributor Covenant. Участвуя, вы обязуетесь соблюдать этот кодекс. Пожалуйста, сообщайте о неприемлемом поведении по адресу [email protected].
=== Соглашения о коде и поддержание порядка Ни одно из этих требований не является обязательным для pull request, но все они помогут. Они также могут быть добавлены после первоначального pull request, но до слияния.
eclipse-code-formatter.xml из
проекта https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
Cloud Build]. Если вы используете IntelliJ, вы можете использовать
плагин https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
Plugin] для импорта того же файла..java содержат простой Javadoc-комментарий класса как минимум с
тегом @author, идентифицирующим вас, и, желательно, хотя бы абзац о том, для чего предназначен класс..java (скопируйте из существующих файлов
в проекте).@author в файлы .java, которые вы существенно изменяете (более
чем косметические изменения).Fixes gh-XXXX в конце сообщения
коммита (где XXXX — номер проблемы).=== Checkstyle
Spring Cloud Build поставляется с набором правил checkstyle. Вы можете найти их в модуле spring-cloud-build-tools. Наиболее примечательные файлы модуля:
<1> Правила Checkstyle по умолчанию <2> Настройка заголовка файла <3> Правила подавления по умолчанию
==== Конфигурация Checkstyle
Правила Checkstyle отключены по умолчанию. Чтобы добавить checkstyle в ваш проект, просто определите следующие свойства и плагины.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
Если вам нужно подавить некоторые правила (например, длина строки должна быть больше), достаточно определить файл по пути ${project.root}/src/checkstyle/checkstyle-suppressions.xml с вашими подавлениями. Пример:
Рекомендуется скопировать ${spring-cloud-build.rootFolder}/.editorconfig и ${spring-cloud-build.rootFolder}/.springformat в ваш проект. Таким образом будут применены некоторые правила форматирования по умолчанию. Вы можете сделать это, выполнив этот скрипт:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== Настройка IDE
==== IntelliJ IDEA
Для настройки IntelliJ вы должны импортировать наши соглашения по коду, профили инспекций и настроить плагин checkstyle. Следующие файлы можно найти в проекте https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build].
<1> Правила Checkstyle по умолчанию <2> Настройка заголовка файла <3> Правила подавления по умолчанию <4> Настройки проекта по умолчанию для IntelliJ, применяющие большинство правил Checkstyle <5> Соглашения о стиле проекта для IntelliJ, применяющие большинство правил Checkstyle
.Стиль кода
Перейдите в File -> Settings -> Editor -> Code style. Там нажмите на значок рядом с разделом Scheme. Затем выберите значение Import Scheme и выберите опцию Intellij IDEA code style XML. Импортируйте файл spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml.
.Профили инспекций
Перейдите в File -> Settings -> Editor -> Inspections. Там нажмите на значок рядом с разделом Profile. Затем нажмите Import Profile и импортируйте файл spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml.
.Checkstyle
Чтобы IntelliJ работал с Checkstyle, необходимо установить плагин Checkstyle. Рекомендуется также установить Assertions2Assertj для автоматического преобразования утверждений JUnit.
Перейдите в File -> Settings -> Other settings -> Checkstyle. Там нажмите на значок + в разделе Configuration file. Затем вам нужно указать, откуда брать правила checkstyle. На изображении выше мы выбрали правила из клонированного репозитория Spring Cloud Build. Однако вы можете указать на GitHub-репозиторий Spring Cloud Build (например, для checkstyle.xml: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml). Нам нужно предоставить следующие переменные:
checkstyle.header.file — укажите на файл spring-cloud-build-tools/src/main/resources/checkstyle-header.txt из Spring Cloud Build либо в вашем клонированном репозитории, либо по URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt.checkstyle.suppressions.file — подавления по умолчанию. Укажите на файл spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml из Spring Cloud Build либо в вашем клонированном репозитории, либо по URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml.checkstyle.additional.suppressions.file — эта переменная соответствует подавлениям в вашем локальном проекте. Например, вы работаете над spring-cloud-contract. Тогда укажите на папку project-root/src/checkstyle/checkstyle-suppressions.xml. Пример для : .ВАЖНО: Не забудьте установить Scan Scope в All sources, так как мы применяем правила checkstyle для производственных и тестовых исходников.
=== Duplicate Finder
Spring Cloud Build включает плагин basepom:duplicate-finder-maven-plugin, который позволяет выявлять дублирующиеся и конфликтующие классы и ресурсы в classpath Java.
==== Конфигурация Duplicate Finder
Duplicate finder включён по умолчанию и будет выполняться на фазе verify вашей сборки Maven, но он будет работать в вашем проекте только если вы добавите duplicate-finder-maven-plugin в раздел build файла pom.xml проекта.
Для других свойств мы установили значения по умолчанию, как указано в https://github.com/basepom/duplicate-finder-maven-plugin/wiki[документации плагина].
Вы можете легко переопределить их, установив значение выбранного свойства с префиксом duplicate-finder-maven-plugin. Например, установите duplicate-finder-maven-plugin.skip в true, чтобы пропустить проверку дубликатов в вашей сборке.
Если вам нужно добавить ignoredClassPatterns или ignoredResourcePatterns в вашу настройку, обязательно добавьте их в раздел конфигурации плагина вашего проекта:
spring-cloud-contract/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml