
Repositório do Spring Cloud Gateway demonstrando a exploração da CVE-2022-22947 para testes de segurança de API e análise de vulnerabilidades.
//// NÃO EDITE ESTE ARQUIVO. ELE FOI GERADO. As alterações manuais neste arquivo serão perdidas quando ele for gerado novamente. Edite os arquivos no diretório src/main/asciidoc/ em vez disso. ////
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"]
Este projeto fornece um API Gateway construído sobre o Ecossistema Spring, incluindo: Spring 5, Spring Boot 2 e Project Reactor. O Spring Cloud Gateway tem como objetivo fornecer uma forma simples, porém eficaz, de rotear para APIs e fornecer a elas preocupações transversais, tais como: segurança, monitoramento/métricas e resiliência.
== Recursos
DiscoveryClient do Spring Cloud para configurar rotas== Compilação
:jdkversion: 1.8
=== Compilação e Testes Básicos
Para compilar o código-fonte, você precisará instalar o JDK {jdkversion}.
O Spring Cloud usa Maven para a maioria das atividades relacionadas à compilação, e você deve conseguir começar rapidamente clonando o projeto de seu interesse e digitando
NOTE: Você também pode instalar o Maven (>=3.3.3) por conta própria e executar o comando mvn no lugar de ./mvnw nos exemplos abaixo. Se fizer isso, talvez seja necessário adicionar -P spring se as configurações locais do Maven não contiverem declarações de repositório para artefatos de pré-lançamento do Spring.
NOTE: Esteja ciente de que talvez seja necessário aumentar a quantidade de memória disponível para o Maven definindo a variável de ambiente MAVEN_OPTS com um valor como -Xmx512m -XX:MaxPermSize=128m. Tentamos cobrir isso na configuração .mvn, então se você precisar fazer isso para que uma compilação seja bem-sucedida, por favor abra um ticket para que as configurações sejam adicionadas ao controle de versão.
Os projetos que exigem middleware (ex.: Redis) para testes geralmente exigem que uma instância local do Docker esteja instalada e em execução.
=== Documentação
O módulo spring-cloud-build tem um perfil "docs" e, se você o ativar, ele tentará compilar as fontes AsciiDoc de src/main/asciidoc. Como parte desse processo, ele procurará um README.adoc e o processará carregando todos os includes, mas sem analisá-lo ou renderizá-lo, apenas copiando-o para ${main.basedir} (que, por padrão, é ${basedir}, ou seja, a raiz do projeto). Se houver alterações no README, elas aparecerão após uma compilação Maven como um arquivo modificado no lugar correto. Basta fazer o commit e enviar a alteração.
=== Trabalhando com o código Se você não tiver preferência de IDE, recomendamos usar https://www.springsource.com/developer/sts[Spring Tools Suite] ou https://eclipse.org[Eclipse] ao trabalhar com o código. Usamos o plugin https://eclipse.org/m2e/[m2eclipse] do Eclipse para suporte ao Maven. Outras IDEs e ferramentas também devem funcionar sem problemas, desde que usem Maven 3.3.3 ou superior.
==== Ative o perfil Maven do Spring Os projetos Spring Cloud exigem que o perfil Maven 'spring' seja ativado para resolver os repositórios de milestone e snapshot do Spring. Use sua IDE preferida para ativar esse perfil, caso contrário você poderá enfrentar erros de compilação.
==== Importando para o Eclipse com m2eclipse Recomendamos o plugin https://eclipse.org/m2e/[m2eclipse] do Eclipse ao trabalhar com o Eclipse. Se você ainda não tiver o m2eclipse instalado, ele está disponível no "Eclipse Marketplace".
NOTE: Versões mais antigas do m2e não suportam Maven 3.3, portanto, depois que os projetos forem importados para o Eclipse, você também precisará informar ao m2eclipse para usar o perfil correto para os projetos. Se você vir muitos erros diferentes relacionados aos POMs nos projetos, verifique se a instalação está atualizada. Se não for possível atualizar o m2e, adicione o perfil "spring" ao seu settings.xml. Alternativamente, você pode copiar as configurações de repositório do perfil "spring" do pom pai para o seu settings.xml.
==== Importando para o Eclipse sem m2eclipse Se você preferir não usar o m2eclipse, pode gerar os metadados do projeto Eclipse usando o seguinte comando:
$ ./mvnw eclipse:eclipse
Os projetos Eclipse gerados podem ser importados selecionando import existing projects no menu file.
== Contribuindo
:spring-cloud-build-branch: master
O Spring Cloud é distribuído sob a licença Apache 2.0, não restritiva, e segue um processo de desenvolvimento no Github bastante padrão, usando o rastreador do Github para issues e mesclando pull requests no master. Se você quiser contribuir até mesmo com algo trivial, não hesite, mas siga as diretrizes abaixo.
=== Assine o Contrato de Licença de Contribuidor Antes de aceitarmos um patch ou pull request não trivial, precisaremos que você assine o https://cla.pivotal.io/sign/spring[Contrato de Licença de Contribuidor]. Assinar o contrato do contribuidor não concede a ninguém direitos de commit no repositório principal, mas significa que podemos aceitar suas contribuições, e você receberá crédito de autor se o fizermos. Contribuidores ativos podem ser convidados a se juntar à equipe principal e receber a capacidade de mesclar pull requests.
=== Código de Conduta Este projeto segue o https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[código de conduta] do Contributor Covenant. Ao participar, espera-se que você cumpra este código. Por favor, relate comportamentos inaceitáveis para [email protected].
=== Convenções de Código e Organização Nenhum desses itens é essencial para um pull request, mas todos ajudam. Eles também podem ser adicionados após o pull request original, mas antes de uma mesclagem.
eclipse-code-formatter.xml do projeto https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build]. Se usar IntelliJ, você pode usar o https://plugins.jetbrains.com/plugin/6546[Plugin Eclipse Code Formatter] para importar o mesmo arquivo..java tenham um comentário de classe Javadoc simples com pelo menos uma tag @author identificando você e, de preferência, pelo menos um parágrafo sobre para que serve a classe..java (copie dos arquivos existentes no projeto)@author nos arquivos .java que você modificar substancialmente (mais do que alterações cosméticas).Fixes gh-XXXX no final da mensagem de commit (onde XXXX é o número da issue).=== Checkstyle
O Spring Cloud Build vem com um conjunto de regras de checkstyle. Você pode encontrá-las no módulo spring-cloud-build-tools. Os arquivos mais notáveis do módulo são:
<1> Regras padrão do Checkstyle <2> Configuração do cabeçalho de arquivo <3> Regras de supressão padrão
==== Configuração do Checkstyle
As regras do Checkstyle estão desabilitadas por padrão. Para adicionar checkstyle ao seu projeto, basta definir as seguintes propriedades e plugins.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
Se você precisar suprimir algumas regras (ex.: o comprimento da linha precisa ser maior), basta definir um arquivo em ${project.root}/src/checkstyle/checkstyle-suppressions.xml com suas supressões. Exemplo:
É aconselhável copiar o ${spring-cloud-build.rootFolder}/.editorconfig e o ${spring-cloud-build.rootFolder}/.springformat para o seu projeto. Dessa forma, algumas regras de formatação padrão serão aplicadas. Você pode fazer isso executando este script:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== Configuração da IDE
==== Intellij IDEA
Para configurar o Intellij, você deve importar nossas convenções de codificação, perfis de inspeção e configurar o plugin do checkstyle. Os seguintes arquivos podem ser encontrados no projeto https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build].
<1> Regras padrão do Checkstyle <2> Configuração do cabeçalho de arquivo <3> Regras de supressão padrão <4> Padrões de projeto para Intellij que aplicam a maioria das regras do Checkstyle <5> Convenções de estilo de projeto para Intellij que aplicam a maioria das regras do Checkstyle
.Estilo de código
Vá para File -> Settings -> Editor -> Code style. Lá, clique no ícone ao lado da seção Scheme. Em seguida, clique no valor Import Scheme e escolha a opção Intellij IDEA code style XML. Importe o arquivo spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml.
.Perfis de inspeção
Vá para File -> Settings -> Editor -> Inspections. Lá, clique no ícone ao lado da seção Profile. Em seguida, clique em Import Profile e importe o arquivo spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml.
.Checkstyle
Para fazer o Intellij funcionar com o Checkstyle, você precisa instalar o plugin Checkstyle. É aconselhável também instalar o Assertions2Assertj para converter automaticamente as asserções JUnit
Vá para File -> Settings -> Other settings -> Checkstyle. Lá, clique no ícone + na seção Configuration file. Em seguida, você precisará definir de onde as regras do checkstyle devem ser obtidas. Na imagem acima, selecionamos as regras do repositório clonado do Spring Cloud Build. No entanto, você pode apontar para o repositório GitHub do Spring Cloud Build (ex.: para o checkstyle.xml: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml). Precisamos fornecer as seguintes variáveis:
checkstyle.header.file - aponte para o arquivo spring-cloud-build-tools/src/main/resources/checkstyle-header.txt do Spring Cloud Build, seja no seu repositório clonado ou via URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt.checkstyle.suppressions.file - supressões padrão. Aponte para o arquivo spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml do Spring Cloud Build, seja no seu repositório clonado ou via URL https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml.checkstyle.additional.suppressions.file - esta variável corresponde às supressões no seu projeto local. Ex.: se você está trabalhando no spring-cloud-contract, aponte para a pasta project-root/src/checkstyle/checkstyle-suppressions.xml. Um exemplo para spring-cloud-contract seria: /home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml.IMPORTANT: Lembre-se de definir o Scan Scope para All sources, pois aplicamos as regras do checkstyle para fontes de produção e teste.
=== Duplicate Finder
O Spring Cloud Build traz o basepom:duplicate-finder-maven-plugin, que permite sinalizar classes e recursos duplicados e conflitantes no classpath do Java.
==== Configuração do Duplicate Finder
O Duplicate finder está habilitado por padrão e será executado na fase verify da sua compilação Maven, mas só terá efeito no seu projeto se você adicionar o duplicate-finder-maven-plugin à seção build do pom.xml do projeto.
Para outras propriedades, definimos padrões conforme listado na https://github.com/basepom/duplicate-finder-maven-plugin/wiki[documentação do plugin].
Você pode sobrescrevê-los facilmente definindo o valor da propriedade selecionada com o prefixo duplicate-finder-maven-plugin. Por exemplo, defina duplicate-finder-maven-plugin.skip como true para pular a verificação de duplicatas na sua compilação.
Se você precisar adicionar ignoredClassPatterns ou ignoredResourcePatterns à sua configuração, certifique-se de adicioná-los na seção de configuração do plugin do seu projeto: