
Repository Spring Cloud Gateway che dimostra lo sfruttamento di CVE-2022-22947 per test di sicurezza API e analisi delle vulnerabilità.
//// NON MODIFICARE QUESTO FILE. È STATO GENERATO. Le modifiche manuali a questo file andranno perse quando verrà rigenerato. Modifica invece i file nella directory 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"]
Questo progetto fornisce un API Gateway costruito sopra l'Ecosystem Spring, includendo: Spring 5, Spring Boot 2 e Project Reactor. Spring Cloud Gateway mira a fornire un modo semplice ed efficace per instradare verso le API e offrire loro preoccupazioni trasversali come: sicurezza, monitoraggio/metriche e resilienza.
== Caratteristiche
DiscoveryClient per configurare le Route== Compilazione
:jdkversion: 1.8
=== Compilazione e test di base
Per compilare il sorgente dovrai installare JDK {jdkversion}.
Spring Cloud utilizza Maven per la maggior parte delle attività di compilazione, e dovresti riuscire a partire abbastanza velocemente clonando il progetto che ti interessa e digitando
NOTA: Puoi anche installare Maven (>=3.3.3) da solo ed eseguire il comando mvn
al posto di ./mvnw negli esempi seguenti. Se lo fai, potresti
anche dover aggiungere -P spring se le impostazioni locali di Maven non
contengono dichiarazioni di repository per gli artefatti pre-release di spring.
NOTA: Tieni presente che potresti dover aumentare la quantità di memoria
disponibile per Maven impostando una variabile d'ambiente MAVEN_OPTS con
un valore come -Xmx512m -XX:MaxPermSize=128m. Cerchiamo di coprire questo aspetto nella
configurazione .mvn, quindi se scopri di doverlo fare per far
riuscire una compilazione, per favore apri un ticket per aggiungere le impostazioni al
controllo del codice sorgente.
I progetti che richiedono middleware (ad es. Redis) per i test generalmente richiedono che un'istanza locale di Docker sia installata e in esecuzione.
=== Documentazione
Il modulo spring-cloud-build ha un profilo "docs", e se lo attivi
cercherà di compilare i sorgenti asciidoc da
src/main/asciidoc. Come parte di questo processo, cercherà un
README.adoc e lo elaborerà caricando tutti gli include, ma non
analizzandolo o renderizzandolo, copiandolo semplicemente in ${main.basedir}
(predefinito a ${basedir}, cioè la radice del progetto). Se ci sono
modifiche nel README, appariranno dopo una compilazione Maven come
un file modificato nel posto corretto. Basta eseguire il commit e inviare la modifica.
=== Lavorare con il codice Se non hai una preferenza per un IDE, ti consigliamo di usare https://www.springsource.com/developer/sts[Spring Tools Suite] o https://eclipse.org[Eclipse] quando lavori con il codice. Usiamo il plugin eclipse https://eclipse.org/m2e/[m2eclipse] per il supporto Maven. Altri IDE e strumenti dovrebbero funzionare senza problemi purché utilizzino Maven 3.3.3 o superiore.
==== Attivare il profilo Maven Spring I progetti Spring Cloud richiedono che il profilo Maven 'spring' sia attivato per risolvere i repository milestone e snapshot di spring. Usa il tuo IDE preferito per impostare questo profilo come attivo, altrimenti potresti riscontrare errori di compilazione.
==== Importare in Eclipse con m2eclipse Raccomandiamo il plugin eclipse https://eclipse.org/m2e/[m2eclipse] quando lavori con Eclipse. Se non hai già installato m2eclipse, è disponibile nel "mercato Eclipse".
NOTA: Le versioni precedenti di m2e non supportano Maven 3.3, quindi una volta che i
progetti vengono importati in Eclipse, dovrai anche dire a
m2eclipse di utilizzare il profilo corretto per i progetti. Se vedi
molti errori diversi relativi ai POM nei progetti, controlla
di avere un'installazione aggiornata. Se non puoi aggiornare m2e,
aggiungi il profilo "spring" al tuo settings.xml. In alternativa puoi
copiare le impostazioni del repository dal profilo "spring" del POM genitore
nel tuo settings.xml.
==== Importare in Eclipse senza m2eclipse Se preferisci non usare m2eclipse, puoi generare i metadati del progetto Eclipse usando il seguente comando:
$ ./mvnw eclipse:eclipse
I progetti Eclipse generati possono essere importati selezionando import existing projects
dal menu file.
== Contribuire
:spring-cloud-build-branch: master
Spring Cloud è rilasciato sotto la licenza Apache 2.0 non restrittiva, e segue un processo di sviluppo Github molto standard, usando il tracker Github per i problemi e unendo le pull request in master. Se vuoi contribuire anche con qualcosa di banale, non esitare, ma segui le linee guida seguenti.
=== Firma il Contributor License Agreement Prima di accettare una patch non banale o una pull request, avremo bisogno che tu firmi il https://cla.pivotal.io/sign/spring[Contributor License Agreement]. Firmare il contratto del contributore non concede a nessuno diritti di commit sul repository principale, ma significa che possiamo accettare i tuoi contributi, e riceverai un credito d'autore se lo faremo. Ai contributori attivi potrebbe essere chiesto di unirsi al team principale, e ricevere la possibilità di unire le pull request.
=== Codice di condotta Questo progetto aderisce al codice di condotta del Contributor Covenant. Partecipando, ti impegni a rispettare questo codice. Segnala comportamenti inaccettabili a [email protected].
=== Convenzioni di codice e manutenzione della casa Nessuna di queste è essenziale per una pull request, ma tutte aiuteranno. Possono anche essere aggiunte dopo la pull request originale ma prima di un merge.
eclipse-code-formatter.xml dal progetto
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build]. Se usi IntelliJ, puoi usare il
plugin https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter] per importare lo stesso file..java abbiano un semplice commento Javadoc di classe con almeno un
tag @author che ti identifichi, e preferibilmente almeno un paragrafo su a cosa serve la classe..java (copia dai file esistenti
nel progetto)@author nei file .java che modifichi sostanzialmente (più
di modifiche estetiche).Fixes gh-XXXX alla fine del messaggio
di commit (dove XXXX è il numero del problema).=== Checkstyle
Spring Cloud Build viene fornito con una serie di regole checkstyle. Puoi trovarle nel modulo spring-cloud-build-tools. I file più notevoli sotto il modulo sono:
<1> Regole Checkstyle predefinite <2> Impostazione dell'intestazione del file <3> Regole di soppressione predefinite
==== Configurazione di Checkstyle
Le regole Checkstyle sono disabilitate per impostazione predefinita. Per aggiungere checkstyle al tuo progetto, basta definire le seguenti proprietà e plugin.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
Se devi sopprimere alcune regole (ad es. la lunghezza della riga deve essere maggiore), allora ti basta definire un file in ${project.root}/src/checkstyle/checkstyle-suppressions.xml con le tue soppressioni. Esempio:
È consigliabile copiare ${spring-cloud-build.rootFolder}/.editorconfig e ${spring-cloud-build.rootFolder}/.springformat nel tuo progetto. In questo modo, verranno applicate alcune regole di formattazione predefinite. Puoi farlo eseguendo questo script:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== Configurazione IDE
==== Intellij IDEA
Per configurare Intellij, devi importare le nostre convenzioni di codifica, i profili di ispezione e impostare il plugin checkstyle. I seguenti file si trovano nel progetto https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build].
<1> Regole Checkstyle predefinite <2> Impostazione dell'intestazione del file <3> Regole di soppressione predefinite <4> Impostazioni predefinite del progetto per Intellij che applicano la maggior parte delle regole Checkstyle <5> Convenzioni di stile del progetto per Intellij che applicano la maggior parte delle regole Checkstyle
.Stile del codice
Vai su File -> Settings -> Editor -> Code style. Lì clicca sull'icona accanto alla sezione Scheme. Lì, clicca sul valore Import Scheme e scegli l'opzione Intellij IDEA code style XML. Importa il file spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml.
.Profili di ispezione
Vai su File -> Settings -> Editor -> Inspections. Lì clicca sull'icona accanto alla sezione Profile. Lì, clicca su Import Profile e importa il file spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml.
.Checkstyle
Per far funzionare Intellij con Checkstyle, devi installare il plugin Checkstyle. È consigliabile installare anche Assertions2Assertj per convertire automaticamente le asserzioni JUnit
Vai su File -> Settings -> Other settings -> Checkstyle. Lì clicca sull'icona + nella sezione Configuration file. Lì, dovrai definire da dove prendere le regole checkstyle. Nell'immagine sopra, abbiamo preso le regole dal repository clonato di Spring Cloud Build. Tuttavia, puoi puntare al repository GitHub di Spring Cloud Build (ad es. per checkstyle.xml: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml). Dobbiamo fornire le seguenti variabili:
checkstyle.header.file - per favore puntalo al file spring-cloud-build-tools/src/main/resources/checkstyle-header.txt di Spring Cloud Build, sia nel tuo repo clonato o tramite l'URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt.checkstyle.suppressions.file - soppressioni predefinite. Per favore puntalo al file spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml di Spring Cloud Build, sia nel tuo repo clonato o tramite l'URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml.checkstyle.additional.suppressions.file - questa variabile corrisponde alle soppressioni nel tuo progetto locale. Ad esempio, stai lavorando su spring-cloud-contract. Quindi punta alla cartella project-root/src/checkstyle/checkstyle-suppressions.xml. Esempio per spring-cloud-contract: /home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml.IMPORTANTE: Ricorda di impostare Scan Scope su All sources poiché applichiamo le regole checkstyle per i sorgenti di produzione e di test.
=== Duplicate Finder
Spring Cloud Build include il plugin basepom:duplicate-finder-maven-plugin, che permette di segnalare classi e risorse duplicate o in conflitto sul classpath Java.
==== Configurazione di Duplicate Finder
Duplicate finder è abilitato per impostazione predefinita e verrà eseguito nella fase verify della tua compilazione Maven, ma avrà effetto solo nel tuo progetto se aggiungi duplicate-finder-maven-plugin alla sezione build del pom.xml del progetto.
Per altre proprietà, abbiamo impostato i predefiniti come elencati nella https://github.com/basepom/duplicate-finder-maven-plugin/wiki[documentazione del plugin].
Puoi facilmente sovrascriverli impostando il valore della proprietà selezionata con il prefisso duplicate-finder-maven-plugin. Ad esempio, imposta duplicate-finder-maven-plugin.skip a true per saltare il controllo dei duplicati nella tua compilazione.
Se devi aggiungere ignoredClassPatterns o ignoredResourcePatterns alla tua configurazione, assicurati di aggiungerli nella sezione di configurazione del plugin del tuo progetto: