Segurança, limitação de corrente: filtre informações ilegais na camada de gateway
gateway externo nginx, intranet de gateway
O nginx pode ser aprimorado com Lua ou Kong
conceito
id: qualquer nome
uri: O endereço do serviço proxy. id e uri são obrigatórios, predicado e filtro são opcionais
Predicado: pode ser usado para corresponder ao uri para acessar o gateway. Se correspondido, a rota atual entrará em vigor.
Filtro: uma instância do GatewayFilter, adicionando lógica antes ou depois do proxy, com maior flexibilidade
Fluxo de processamento
Primeiro, o Mapeamento do manipulador processa o URL e depois o entrega ao Web Handler. Ele chama a primeira metade do filtro para processamento. Após a conclusão do processamento, ele chama o serviço de proxy real. Depois que o serviço de proxy responde, ele executa a lógica. da segunda metade do filtro Retorne o resultado para WebHandler, depois para HandlerMapping e, finalmente, para o cliente.
Se os elementos da lista tiverem vários campos, você precisará de "-" e dois pontos para especificar cada campo e valor, respectivamente; se houver apenas um campo, você poderá usar vírgulas para separá-lo;
Configuração do tipo de objeto, cada campo pode ser configurado através de “-” e dois pontos
Tipo de mapa: chave, valor separado por dois pontos
predicates:
- Path=/sendOrder
- Query=name,ma.
- name: Query
args:
param: id
regexp: d+
#predicates是List, 它的元素是
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();}
等号分割转成对象的写法不是yml内置支持的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
predicado
A configuração do predicado é uma Lista, cujos elementos podem ser strings em um formato específico ou objetos. Método de escrita de string: dividido por sinal de igual, a primeira parte é o nome do predicado, a segunda parte args é separada por vírgulas, o valor é salvo no valor do mapa e a chave do mapa é gerada automaticamente. Método de escrita de objeto: PredicateDefinition
Se houver vírgulas e dois pontos nos próprios argumentos, o formato de string não poderá ser usado
O métodoshortType define o método de análise dos parâmetros args para ConfigClass: atalhoFieldOrder remove o prefixo ShortFieldPrefix e corresponde ao nome do campo ConfigClass. O val do parâmetro args corresponde ao valor do campo de ConfigClass: lista separada por vírgula; : Lista separada por vírgula, mas a última O valor é um valor booleano, que eventualmente é convertido em um Mapa de 2 chaves. O valor da primeira chave é a Lista na frente do valor booleano, e a segunda chave é a. Valor booleano.
Usado para combinar solicitações de acesso ao gateway (como uri, parâmetros de consulta, cabeçalhos de solicitação). Se correspondido, a rota atual entrará em vigor.
Correspondente à implementação de GatewayPredicate, a classe de implementação é criada pela fábrica. A fábrica é a classe de implementação de RoutePredicateFactory. A especificação de nomenclatura da classe de implementação é: nome do predicado + RoutePredicateFactory.
O nome do predicado corresponde ao prefixo do nome da classe da classe de implementação de fábrica e o parâmetro do predicado args corresponde ao ConfigClass de fábrica.
Vários predicados sãoeRelação
Quando o predicado não passa, o gateway retorna 404
Caminho
Corresponder caminhos, oferecer suporte à correspondência de formigas e extrair uriVariables por meio de {}
Consulta
Existe um nome de parâmetro de solicitação http correspondente. O valor pode ser regular.
nome é consulta fixa, args possui 2 valores, param e regexp, correspondentes ao nome e valor do parâmetro de consulta
Quando apenas o nome estiver configurado significa que enquanto existir o parâmetro da requisição ele será passado.
Cabeçalho
HeaderRoutePredicateFactory
Corresponder o nome e o valor do cabeçalho da solicitação Você só pode corresponder ao nome. O valor real do cabeçalho da solicitação pode ser múltiplo.
Método
Corresponde ao método de solicitação HTTP, a configuração deve estar em letras maiúsculas e separadas por vírgula.
Endereço Remoto
O IP do cliente correspondente à solicitação, para ser mais preciso, o IP do último proxy da rede, pode ser múltiplo, separado por vírgula
Hospedar
Corresponde ao valor da parte do host no cabeçalho da solicitação do host (excluindo a porta). Pode ser múltiplo, separado por vírgulas e pode ser correspondido por ant.
Use AntPathMatcher para fazer a correspondência e o separador de caminho é "."
Biscoito
Combine o nome e o valor do cookie. O valor pode ser correspondido regularmente.
Peso
Usado para balanceamento de carga de diferentes rotas. Rotas no mesmo grupo são carregadas de acordo com o peso.
Você pode configurar 2 valores, separados por vírgula, que são agrupamento e peso.
WeightCalculatorWebFilter: Quando iniciado, um mapa de duas camadas é gerado com base na configuração de peso. A primeira camada é o nome do grupo e a segunda camada é o ID de roteamento. Quando a solicitação chega, um número aleatório de 0 a 1 é gerado. e um ID de roteamento é selecionado para cada grupo.
WeightRoutePredicateFactory: ao filtrar por predicado, filtre com base no grupo e no ID da rota
filtro
O método de gravação de configuração é igual ao predicado. O método de gravação de string: dividido por sinal de igual. A primeira parte corresponde ao prefixo do nome da classe GatewayFilterFactory da fábrica de filtros e a segunda parte é o parâmetro.
Filtros são usados para modificar solicitações e respostas
AdicionarCabeçalhoDeSolicitação
Adicione cabeçalhos de solicitação, que podem ser obtidos pelo back-end
O valor do cabeçalho da solicitação suporta aquisição dinâmica de uriVariables
Prefixo de tira
Existe apenas um valor inteiro n. Após dividir o caminho solicitado por "/", remova o prefixo n.
Limitando
Domínio cruzado
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
O servidor determina se é uma solicitação entre domínios, verificando se a origem do cabeçalho da solicitação e o esquema, o host e a porta do URL da solicitação são iguais, desde que haja uma diferença, é uma solicitação entre domínios.
Deve haver uma configuração de domínio cruzado e o uri solicitado corresponde ao uriPattern da configuração de domínio cruzado. O gateway determinará se é de domínio cruzado. Se for de domínio cruzado, permitirá cabeçalhos de solicitação de domínio cruzado. fontes, métodos de solicitação e solicitações reais na configuração de domínio cruzado Se o cabeçalho da solicitação, a origem e o método de solicitação correspondem, se todos corresponderem, execute o acesso entre domínios, caso contrário, retorne 403Forbiden.
Oferece suporte à obtenção do ID do serviço por meio da descoberta de serviço e gera automaticamente a configuração de roteamento com base no ID do serviço.O uri da configuração de roteamento padrão é lb://serviceId, o predicado é /serviceId/** e o filtro é Rewritepath para remover serviceId.
filtro global
FiltroClienteReactiveLoadBalancer
Para processar o URI de roteamento com esquema lb, primeiro obtenha a instância de serviço de acordo com o nome do serviço por meio de ServiceInstanceListSupplier e, em seguida, balanceie a carga por meio da instância ReactorLoadBalancer
FiltroRouteToRequestUrl
Faça duas coisas: 1. Dê suporte a esquemas de 2 camadas, salve o esquema externo em GATEWAY_SCHEME_PREFIX_ATTR e remova-o. 2. Use o sheme interno, o host e a porta para substituir o URI solicitado real para obter o encaminhamento.