
Spring Cloud Gateway Repository, das die Ausnutzung von CVE-2022-22947 für API-Sicherheitstests und Schwachstellenanalyse demonstriert.
//// BEARBEITEN SIE DIESE DATEI NICHT. SIE WURDE GENERIERT. Manuelle Änderungen an dieser Datei gehen verloren, wenn sie erneut generiert wird. Bearbeiten Sie stattdessen die Dateien im Verzeichnis 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"]
Dieses Projekt bietet ein API-Gateway, das auf dem Spring-Ökosystem aufbaut, einschließlich: Spring 5, Spring Boot 2 und Project Reactor. Spring Cloud Gateway zielt darauf ab, eine einfache und dennoch effektive Möglichkeit zu bieten, APIs zu routen und Querschnittsbelange wie Sicherheit, Überwachung/Metriken und Ausfallsicherheit bereitzustellen.
== Funktionen
DiscoveryClient zur Konfiguration von Routen== Erstellen
:jdkversion: 1.8
=== Grundlegende Kompilierung und Tests
Um die Quelle zu erstellen, müssen Sie JDK {jdkversion} installieren.
Spring Cloud verwendet Maven für die meisten buildbezogenen Aktivitäten, und Sie sollten in der Lage sein, schnell zu beginnen, indem Sie das gewünschte Projekt klonen und Folgendes eingeben:
HINWEIS: Sie können auch Maven (>=3.3.3) selbst installieren und den Befehl mvn anstelle von ./mvnw in den folgenden Beispielen verwenden. Wenn Sie das tun, müssen Sie möglicherweise auch -P spring hinzufügen, wenn Ihre lokalen Maven-Einstellungen keine Repository-Deklarationen für Spring-Vorabversion-Artefakte enthalten.
HINWEIS: Beachten Sie, dass Sie möglicherweise den von Maven verfügbaren Speicher erhöhen müssen, indem Sie eine MAVEN_OPTS-Umgebungsvariable mit einem Wert wie -Xmx512m -XX:MaxPermSize=128m setzen. Wir versuchen, dies in der .mvn-Konfiguration abzudecken. Wenn Sie feststellen, dass Sie dies tun müssen, um einen Build erfolgreich abzuschließen, reichen Sie bitte ein Ticket ein, damit die Einstellungen zur Quellcodeverwaltung hinzugefügt werden.
Die Projekte, die Middleware (z. B. Redis) für Tests benötigen, erfordern in der Regel, dass eine lokale Instanz von Docker installiert und ausgeführt wird.
=== Dokumentation
Das spring-cloud-build-Modul hat ein 'docs'-Profil, und wenn Sie es aktivieren, wird es versuchen, AsciiDoc-Quellen aus src/main/asciidoc zu erstellen. Im Rahmen dieses Prozesses wird nach einer README.adoc gesucht und diese verarbeitet, indem alle Includes geladen werden, aber nicht analysiert oder gerendert, sondern nur nach ${main.basedir} kopiert (standardmäßig ${basedir}, d. h. das Wurzelverzeichnis des Projekts). Wenn es Änderungen in der README gibt, erscheint diese nach einem Maven-Build als geänderte Datei an der richtigen Stelle. Committen Sie sie einfach und pushen Sie die Änderung.
=== Arbeiten mit dem Code Wenn Sie keine IDE-Präferenz haben, empfehlen wir die Verwendung von https://www.springsource.com/developer/sts[Spring Tools Suite] oder https://eclipse.org[Eclipse] beim Arbeiten mit dem Code. Wir verwenden das https://eclipse.org/m2e/[m2eclipse] Eclipse-Plugin für die Maven-Unterstützung. Andere IDEs und Tools sollten ebenfalls problemlos funktionieren, solange sie Maven 3.3.3 oder besser verwenden.
==== Aktivieren des Spring-Maven-Profils Spring Cloud-Projekte erfordern die Aktivierung des 'spring'-Maven-Profils, um die Spring-Milestone- und Snapshot-Repositories aufzulösen. Verwenden Sie Ihre bevorzugte IDE, um dieses Profil zu aktivieren, andernfalls können Build-Fehler auftreten.
==== Importieren in Eclipse mit m2eclipse Wir empfehlen das https://eclipse.org/m2e/[m2eclipse] Eclipse-Plugin für die Arbeit mit Eclipse. Wenn Sie m2eclipse noch nicht installiert haben, ist es im 'Eclipse Marketplace' verfügbar.
HINWEIS: Ältere Versionen von m2e unterstützen Maven 3.3 nicht, daher müssen Sie m2eclipse nach dem Import der Projekte in Eclipse mitteilen, das richtige Profil für die Projekte zu verwenden. Wenn Sie viele verschiedene Fehler im Zusammenhang mit den POMs in den Projekten sehen, überprüfen Sie, ob Sie eine aktuelle Installation haben. Wenn Sie m2e nicht aktualisieren können, fügen Sie das 'spring'-Profil in Ihre settings.xml ein. Alternativ können Sie die Repository-Einstellungen aus dem 'spring'-Profil des übergeordneten POM in Ihre settings.xml kopieren.
==== Importieren in Eclipse ohne m2eclipse Wenn Sie m2eclipse nicht verwenden möchten, können Sie Eclipse-Projektmetadaten mit dem folgenden Befehl generieren:
$ ./mvnw eclipse:eclipse
Die generierten Eclipse-Projekte können importiert werden, indem Sie im Datei-Menü Vorhandene Projekte importieren auswählen.
== Mitwirken
:spring-cloud-build-branch: master
Spring Cloud wird unter der nicht restriktiven Apache 2.0-Lizenz veröffentlicht und folgt einem sehr standardmäßigen Github-Entwicklungsprozess, wobei Github Tracker für Issues und das Zusammenführen von Pull-Requests in den Master verwendet werden. Wenn Sie auch nur etwas Triviales beitragen möchten, zögern Sie nicht, aber folgen Sie den untenstehenden Richtlinien.
=== Unterzeichnen der Contributor License Agreement Bevor wir einen nicht-trivialen Patch oder Pull-Request akzeptieren, müssen Sie die https://cla.pivotal.io/sign/spring[Contributor License Agreement] unterzeichnen. Die Unterzeichnung der Contributor-Vereinbarung gewährt niemandem Commit-Rechte auf das Haupt-Repository, bedeutet jedoch, dass wir Ihre Beiträge akzeptieren können und Sie eine Autoren-Gutschrift erhalten, wenn wir dies tun. Aktive Mitwirkende könnten gebeten werden, dem Kernteam beizutreten und die Möglichkeit erhalten, Pull-Requests zusammenzuführen.
=== Verhaltenskodex Dieses Projekt hält sich an den Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[Code of Conduct]. Durch Ihre Teilnahme wird von Ihnen erwartet, diesen Kodex einzuhalten. Bitte melden Sie inakzeptables Verhalten an [email protected].
=== Code-Konventionen und -Pflege Keine davon ist für einen Pull-Request unbedingt erforderlich, aber sie helfen alle. Sie können auch nach dem ursprünglichen Pull-Request, aber vor einem Merge hinzugefügt werden.
eclipse-code-formatter.xml aus dem https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build]-Projekt importieren. Wenn Sie IntelliJ verwenden, können Sie das https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter Plugin] verwenden, um dieselbe Datei zu importieren..java-Dateien einen einfachen Javadoc-Klassenkommentar mit mindestens einem @author-Tag haben, der Sie identifiziert, und vorzugsweise mindestens einen Absatz, der beschreibt, wozu die Klasse dient..java-Dateien den ASF-Lizenzkopfkommentar hinzu (kopieren Sie ihn aus vorhandenen Dateien im Projekt).@author in die .java-Dateien ein, die Sie wesentlich ändern (mehr als kosmetische Änderungen).Fixes gh-XXXX am Ende der Commit-Nachricht hinzu (wobei XXXX die Issue-Nummer ist).=== Checkstyle
Spring Cloud Build enthält eine Reihe von Checkstyle-Regeln. Sie finden sie im Modul spring-cloud-build-tools. Die wichtigsten Dateien im Modul sind:
<1> Standard-Checkstyle-Regeln <2> Dateikopf-Einrichtung <3> Standard-Unterdrückungsregeln <4> Projektstandards für Intellij, die die meisten Checkstyle-Regeln anwenden <5> Projektstil-Konventionen für Intellij, die die meisten Checkstyle-Regeln anwenden
==== Checkstyle-Konfiguration
Checkstyle-Regeln sind standardmäßig deaktiviert. Um Checkstyle zu Ihrem Projekt hinzuzufügen, definieren Sie einfach die folgenden Eigenschaften und Plugins.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
Wenn Sie einige Regeln unterdrücken müssen (z. B. die Zeilenlänge muss länger sein), reicht es aus, eine Datei unter ${project.root}/src/checkstyle/checkstyle-suppressions.xml mit Ihren Unterdrückungen zu definieren. Beispiel:
Es ist ratsam, ${spring-cloud-build.rootFolder}/.editorconfig und ${spring-cloud-build.rootFolder}/.springformat in Ihr Projekt zu kopieren. Auf diese Weise werden einige Standardformatierungsregeln angewendet. Sie können dies tun, indem Sie dieses Skript ausführen:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== IDE-Einrichtung
==== Intellij IDEA
Um Intellij einzurichten, sollten Sie unsere Code-Konventionen, Inspektionsprofile importieren und das Checkstyle-Plugin einrichten. Die folgenden Dateien finden Sie im https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build]-Projekt.
<1> Standard-Checkstyle-Regeln <2> Dateikopf-Einrichtung <3> Standard-Unterdrückungsregeln <4> Projektstandards für Intellij, die die meisten Checkstyle-Regeln anwenden <5> Projektstil-Konventionen für Intellij, die die meisten Checkstyle-Regeln anwenden
.Code-Stil
Gehen Sie zu Datei -> Einstellungen -> Editor -> Code-Stil. Klicken Sie dort auf das Symbol neben dem Abschnitt Schema. Klicken Sie dort auf den Wert Schema importieren und wählen Sie die Option Intellij IDEA Code Style XML. Importieren Sie die Datei spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml.
.Inspektionsprofile
Gehen Sie zu Datei -> Einstellungen -> Editor -> Inspektionen. Klicken Sie dort auf das Symbol neben dem Abschnitt Profil. Klicken Sie dort auf Profil importieren und importieren Sie die Datei spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml.
.Checkstyle
Damit Intellij mit Checkstyle funktioniert, müssen Sie das Checkstyle-Plugin installieren. Es ist ratsam, auch Assertions2Assertj zu installieren, um JUnit-Assertions automatisch umzuwandeln.
Gehen Sie zu Datei -> Einstellungen -> Weitere Einstellungen -> Checkstyle. Klicken Sie dort auf das +-Symbol im Abschnitt Konfigurationsdatei. Dort müssen Sie festlegen, woher die Checkstyle-Regeln bezogen werden sollen. Im obigen Bild haben wir die Regeln aus dem geklonten Spring Cloud Build-Repository übernommen. Sie können jedoch auf das GitHub-Repository von Spring Cloud Build verweisen (z. B. für die checkstyle.xml: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml). Wir müssen die folgenden Variablen bereitstellen:
checkstyle.header.file - bitte verweisen Sie auf die Datei spring-cloud-build-tools/src/main/resources/checkstyle-header.txt von Spring Cloud Build entweder in Ihrem geklonten Repository oder über die URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt.checkstyle.suppressions.file - Standardunterdrückungen. Bitte verweisen Sie auf die Datei spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml von Spring Cloud Build entweder in Ihrem geklonten Repository oder über die URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml.checkstyle.additional.suppressions.file - diese Variable entspricht den Unterdrückungen in Ihrem lokalen Projekt. Z. B. arbeiten Sie an spring-cloud-contract. Verweisen Sie dann auf den Ordner project-root/src/checkstyle/checkstyle-suppressions.xml. Beispiel für wäre: .WICHTIG: Denken Sie daran, den Scan-Bereich auf Alle Quellen zu setzen, da wir Checkstyle-Regeln für Produktions- und Testquellen anwenden.
=== Duplicate Finder
Spring Cloud Build bringt das basepom:duplicate-finder-maven-plugin mit, das die Markierung von doppelten und widersprüchlichen Klassen und Ressourcen im Java-Klassenpfad ermöglicht.
==== Duplicate Finder-Konfiguration
Duplicate Finder ist standardmäßig aktiviert und wird in der verify-Phase Ihres Maven-Builds ausgeführt, aber es wird nur in Ihrem Projekt wirksam, wenn Sie das duplicate-finder-maven-plugin zum build-Abschnitt der pom.xml Ihres Projekts hinzufügen.
Für andere Eigenschaften haben wir Standardwerte festgelegt, wie in der https://github.com/basepom/duplicate-finder-maven-plugin/wiki[Plugin-Dokumentation] aufgeführt. Sie können diese leicht überschreiben, indem Sie den Wert der ausgewählten Eigenschaft mit dem Präfix duplicate-finder-maven-plugin setzen. Setzen Sie zum Beispiel duplicate-finder-maven-plugin.skip auf true, um die Duplikatprüfung in Ihrem Build zu überspringen.
Wenn Sie ignoredClassPatterns oder ignoredResourcePatterns zu Ihrer Konfiguration hinzufügen müssen, fügen Sie diese bitte im Plugin-Konfigurationsabschnitt Ihres Projekts hinzu:
spring-cloud-contract/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml