Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 9128|Resposta: 0

[Fonte] Fábricas de filtros construídas no Spring Cloud Gateway

[Copiar link]
Publicado em 07/02/2022 13:36:49 | | |
Fábrica de filtros embutidos

Aqui está uma tabela simples de todas as fábricas de filtros incorporadas ao Spring Cloud Gateway, que não é muito detalhada, mas pode ser usada como uma visão geral rápida. Como segue:

Fábrica de filtros
função
parâmetro
AddRequestHeader
Adicionar um Cabeçalho ao pedido original
Nome e valor do cabeçalho
AddRequestParameter
Adicionar parâmetros de requisição à solicitação original
Nome e valor do parâmetro
AddResponseHeader
Adicionar um cabeçalho à resposta original
Nome e valor do cabeçalho
DedupeResponseHeader
Rejeita valores duplicados no cabeçalho de resposta
O nome do cabeçalho e a estratégia de deduplicação que precisam ser desduplicadas
Histrix
Introduza a proteção contra disjuntores da Hystrix para a rota
O nome HystrixCommand
Cabeçalhos de Reserva
Adicionar informações específicas de exceção ao cabeçalho da solicitação do FallbackUri
Nome do cabeçalho
PrefixPath
Adicionar um prefixo ao caminho original da requisição
Caminho do prefixo
PreserveHostHeader
Adicione uma propriedade preserveHostHeader=true à solicitação, que o filtro de roteamento verifica para decidir se você quer enviar o Host original
não
RequestRateLimiter
Usado para reduzir a limitação de requisições, o algoritmo de redução de velocidade é um balde de tokens
keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
Redirecionar Para
Redirecione a solicitação original para a URL especificada
Código de status HTTP e URL de redirecionamento
RemoveHopByHopHeadersFilter
Remover uma série de cabeçalhos prescritos pela organização IETF para o pedido original
Isso é ativado por padrão, e você pode especificar quais cabeçalhos deletar apenas pela configuração
RemoveRequestHeader
Exclua um cabeçalho para a solicitação original
Nome do cabeçalho
RemoveResponseHeader
Remova um cabeçalho para a resposta original
Nome do cabeçalho
RewritePath
Reescreva o caminho original da requisição
O regex original do caminho e o regex do caminho reescrito
RewriteResponseHeader
Reescreva um cabeçalho na resposta original
Nome do cabeçalho, expressão regular do valor, valor reescrito
SaveSession
Aplicar a operação WebSession::save antes de encaminhar a solicitação
não
secureHeaders
Adicione uma série de cabeçalhos de resposta que atuam como segurança à resposta original
Nenhum, você pode modificar os valores desses cabeçalhos de resposta de segurança
SetPath
Modificar o caminho original da requisição
Caminho modificado
SetResponseHeader
Modificar o valor de um cabeçalho na resposta original
Nome do cabeçalho, o valor modificado
SetStatus
Modificar o código de status da resposta original
Códigos de status HTTP, que podem ser números ou cadeias de caracteres
Prefixo Strip
Usado para truncar o caminho da solicitação original
Use números para indicar o número de caminhos a serem truncados
Repetir
Tente novamente respostas diferentes
retries、status、methods、series
RequestSize
Defina o tamanho dos pacotes máximos solicitados que podem ser recebidos. Se o tamanho do pacote de requisição exceder o valor definido, 413 Payload Too Large é retornado
O tamanho do pacote de requisição está em bytes e o valor padrão é 5M
ModificarPedidoCorpo
Modifique o conteúdo do corpo original da solicitação antes de encaminhar a solicitação
O conteúdo modificado do corpo do pedido
ModifyResponseBody
Modificar o conteúdo do corpo original da resposta
O conteúdo modificado do corpo da resposta
Inadimplência
Adicionar filtros para todas as rotas
Nome e valor da fábrica do filtro

Dicas: Cada fábrica de filtros corresponde a uma classe de implementação, e estasO nome da classe deve terminar com GatewayFilterFactoryEsta é uma convenção do Spring Cloud Gateway, por exemplo, a classe de implementação correspondente ao AddRequestHeader é AddRequestHeaderGatewayFilterFactory. Amigos interessados no código-fonte podem emendar nomes de classes específicos de acordo com essa regra para encontrar o código de implementação dessas fábricas de filtros embutidas.

1、AddRequestHeader GatewayFilter Factory

Adicione um cabeçalho à solicitação original, exemplo de configuração:


Adicione um cabeçalho de solicitação chamado X-Request-Foo com o valor de Bar à solicitação original

2、AddRequestParameter GatewayFilter Factory

Adicionar parâmetros e valores de requisição à requisição original, exemplo de configuração:


Adicione um parâmetro chamado foo com o valor de bar à solicitação original, ou seja: foo=bar

3、AddResponseHeader GatewayFilter Factory

Adicione um cabeçalho à resposta original, exemplo de configuração:


Adicione um cabeçalho de resposta chamado X-Request-Foo com o valor de Bar à resposta original

4、DedupeResponseHeader GatewayFilter Factory

O DedupeResponseHeader pode remover valores duplicados em cabeçalhos de resposta com base no nome do cabeçalho configurado e na política de deduplicação, que é um novo recurso fornecido pelo Spring Cloud Greenwich SR2 e que não pode ser usado nesta versão.

NósSe o Cabeçalho CORS (Solving Cross-Domain) estiver definido tanto no Gateway quanto no microsserviço, se nenhuma configuração for feita, então o valor do Cabeçalho CORS obtido solicitando o microserviço -> Gateway ->, será assim:


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
Você pode ver que os valores desses dois cabeçalhos são duplicados; se quiser desduplicar os valores desses dois cabeçalhos, precisa usar DedupeResponseHeader, exemplo de configuração:

Estratégia de Deduplicação:

  • RETAIN_FIRST: Padrão, mantenha o primeiro valor
  • RETAIN_LAST: Manter o último valor
  • RETAIN_UNIQUE: Mantenha todos os valores únicos na ordem em que apareceram pela primeira vez


Se você quiser ter uma compreensão mais abrangente da fábrica de filtros, recomenda-se ler o código-fonte da fábrica de filtros, pois o código-fonte contém notas detalhadas e exemplos, o que é melhor do que a documentação oficial: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory

5、Hystrix GatewayFilter Factory

Apresentando a proteção contra disjuntores da Hystrix para rotas, exemplo de configuração:


Hystrix é a primeira geração de componentes tolerantes a falhas do Spring Cloud, mas entrou em modo de manutenção, e o Hystrix será removido pelo Spring Cloud no futuro, sendo substituído pelo Alibaba Sentinel/Resilience4J. Portanto, este artigo não vai entrar em detalhes; se você tiver interesse, pode consultar a documentação oficial: Hystrix GatewayFilter Factory

6、Fábrica de Filtros GatewayFallbackHeaders

Também suportando Hystrix, a fábrica de filtros descrita na seção anterior suporta um parâmetro de configuração: fallbackUri, que é usado para encaminhar requisições para um URI específico quando ocorre uma exceção. A fábrica de filtros FallbackHeaders pode adicionar um cabeçalho ao encaminhar uma requisição para o URI, e o valor desse cabeçalho é a informação específica da exceção. Exemplo de configuração:


Não vou entrar em detalhes aqui, se você tiver interesse, pode consultar a documentação oficial: FallbackHeaders GatewayFilter Factory

7、PrefixPath GatewayFilter Factory

Adicionar um caminho de prefixo ao caminho original da requisição, exemplo de configuração:


Essa configuração faz com que a visita a ${GATEWAY_URL}/hello seja encaminhada parahttps://example.org/mypath/hello

8、PreserveHostHeader GatewayFilter Factory

Adicione uma propriedade preserveHostHeader=true à requisição, que o filtro de roteamento verifica para decidir se envia o Host Header original. Exemplo de configuração:


Se não estiver definido, então o cabeçalho chamado Host será controlado pelo Cliente Http

9、Fábrica de GatewayFilterLimitador de RequestRateLimiter

Ele é usado para reduzir a limitação de requisições, e o algoritmo de limitação é um balde de tokens. Exemplo de configuração:


10、Redirecionar Para a Fábrica de Filtros do Gateway.

Redirecione a solicitação original para a URL especificada, exemplo de configuração:


Essa configuração redireciona o acesso a ${GATEWAY_URL}/hello para https://acme.org/hello , e carregar umLocation:http://acme.orgHeader, enquanto o código de status HTTP que retorna o cliente é 302

Anotações:

O código de status HTTP deve ser 3xx, por exemplo, 301

A URL deve ser legítima e servir como valor do Cabeçalho de Localização

11、RemoveHopByHopHeadersFilter GatewayFilter Factory

Para o pedido original de remover uma série de cabeçalhos especificados pela organização do IETF, os cabeçalhos deletados padrão são os seguintes:


  • Conexão
  • Manter-Vivo
  • Autentificação por Procuração
  • Autorização por Procuração
  • TE
  • Reboque
  • Codificação por transferência
  • Melhoramento


Você pode especificar quais cabeçalhos só são excluídos através da configuração, exemplo de configuração:


12、RemoveRequestHeader GatewayFilter Factory

Para remover um cabeçalho para a solicitação original, configure um exemplo:


Remova o cabeçalho de requisição chamado X-Request-Foo da solicitação original

13、RemoveResponseHeader GatewayFilter Factory

Para remover um cabeçalho para a resposta original, configure um exemplo:


Remova o cabeçalho de resposta chamado X-Request-Foo da resposta original

14、RewritePath GatewayFilter Factory

Sobrescrevendo o caminho original da requisição com uma expressão regular, exemplo de configuração:


Essa configuração permite o acesso ao /foo/bar para reescrever o caminho para /bar e encaminhá-lo, ou seja, encaminhar para https://example.org/bar。 Note que, devido à sintaxe YAML, $\ precisa ser usado em vez de $

15、RewriteResponseHeader GatewayFilter Factory

Reescreva um cabeçalho na resposta original, exemplo de configuração:


A importância dessa configuração é que, se o valor de X-Response-Foo no cabeçalho de resposta for /42?user=ford&password=omg!what&flag=true, então ela será reescrita para /42?user=ford&password=***&flag=true de acordo com o valor configurado, ou seja, a senha=omg!o que será reescrito para senha=***

16、SaveSession GatewayFilter Factory

Antes de encaminhar a solicitação, aplique a operação WebSession::save, exemplo de configuração:


Ele é usado principalmente para armazenamento diferido de dados (dados não são persistidos imediatamente), como o Spring Session, e busca garantir que o estado da sessão seja salvo antes que a solicitação seja encaminhada. Se você integra o Spring Secutiry ao Spring Session e quer garantir que todas as informações de segurança sejam transmitidas para máquinas posteriores, precisa configurar esse filtro.

17、secureHeaders GatewayFilter Factory

A fábrica de filtros secureHeaders baseia-se principalmente nas recomendações deste blog, adicionando uma série de cabeçalhos de resposta que desempenham um papel de segurança na resposta original. Por padrão, os seguintes Cabeçalhos (incluindo valores) são adicionados:


  • X-Xss-Protection:1; mode=block
  • Strict-Transport-Security:max-age=631138519
  • X-Frame-Options:DENY
  • X-Content-Type-Options:nosniff
  • Referrer-Policy:no-referrer
  • Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
  • X-Download-Options:noopen
  • X-Permitted-Cross-Domain-Policies:none


Se você quiser modificar os valores desses Cabeçalhos, então precisa usar os sufixos correspondentes desses Cabeçalhos, conforme segue:

  • Cabeçalho-protecção-XSS
  • segurança estrita-transporte
  • Opções de quadros
  • Opções de tipo de conteúdo
  • Política de referência
  • política de segurança de conteúdo
  • opções de download
  • Políticas permitidas-cruz-domínios


Exemplo de configuração:


Se você quiser desativar certos cabeçalhos, pode usar a seguinte configuração:

18、SetPath GatewayFilter Factory

Modifique o caminho original da requisição e configure um exemplo:


Essa configuração faz com que seja encaminhado para ${GATEWAY_URL}/foo/bar quando acessadohttps://example.org/bar ou seja, o /foo/bar original foi alterado para /bar

19、SetResponseHeader GatewayFilter Factory

Modificar o valor de um cabeçalho na resposta original, configurar um exemplo:


Modificar o valor de X-Response-Foo na resposta original a Bar

20、SetStatus GatewayFilter Factory

Modificar o código de status da resposta original, exemplo de configuração:


O valor de SetStatusd pode ser um número ou uma string. Mas deve ser o valor na classe de enumeração Spring HttpStatus. Ambas as configurações acima podem retornar o código de status HTTP 401.

21、StripPrefix GatewayFilter Factory

Para truncar o caminho da requisição original, exemplo de configuração:


Como mostrado na configuração acima, se o caminho solicitado for /name/bar/foo, ele será truncado para /foo e encaminhado, ou seja, 2 caminhos serão truncados.

22、Retry GatewayFilter Factory

Retente para respostas diferentes, por exemplo, para códigos de status HTTP, exemplo de configuração:


Os seguintes parâmetros podem ser configurados:

  • Tentativas: O número de tentativas
  • statuses: O código de status que precisa ser retestado, definido em org.springframework.http.HttpHttpStatus
  • métodos: O método de solicitação que precisa ser retentado, com um valor em org.springframework.http.HttpHttpMethod
  • série de códigos de status HTTP, com valor em org.springframework.http.HttpHttpStatus.Series


23、RequestSize GatewayFilter Factory

Defina o tamanho máximo dos pacotes de requisição permitidos a serem recebidos, exemplo de configuração:


Se o tamanho do pacote de requisição exceder o valor definido, um 413 Payload Too Large é retornado junto com uma mensagem de erro

24、Modificar Corpo de Solicitação GatewayFilter Factory

Modifique o conteúdo original do corpo da solicitação antes de encaminhar a solicitação, a fábrica de filtros só pode ser configurada por código, não no arquivo de configuração. Exemplo de código:


Dicas: Esta fábrica de filtros está no estado BETA, e a API pode mudar no futuro.Por favor, use o ambiente de produção com cautela

25、Modificar Corpo de Resposta Gateway Factory Filter

A fábrica de filtros também pode ser usada para modificar o conteúdo do corpo de resposta original, e a fábrica de filtros só pode ser configurada por código, não no arquivo de configuração. Exemplo de código:


Dicas: Esta fábrica de filtros está em estado BETA, a API pode mudar no futuro, por favor, use-a com cautela no ambiente de produção

26、Filtros Padrão

Os Filtros Padrão são usados para adicionar uma fábrica de filtros a todas as rotas, ou seja, para passarA fábrica de filtros configurada pelo Filtro Padrão se aplicará a todas as rotas。 Exemplo de configuração:


(Fim)




Anterior:Logs do Docker preenchem discos e migração de dados
Próximo:Instruções SQL spliced dinamicamente em Java impedem a injeção de banco de dados
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com