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:
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)
|