Существует два способа определения параметров для ваших фильтров в application.yml
. Сначала используйте ключевое слово args:
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://myapi.com
filters:
- name: TestLoggingFilter
args:
value: ThisIsATest
, а второе - встроенными аргументами:
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://myapi.com
filters:
- TestLoggingFilter=ThisIsATest
Если вы хотите использовать встроенные аргументы, обязательно переопределите метод shortcutFieldOrder
в вашем фильтре массивом, содержащим имя параметров, которые вы хотите получить, этот массив также используется для определения порядкаthe params.
Ниже приведен пример простого фильтра, который работает с любым из предыдущих определений:
package com.es.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
@Component
public class TestLoggingFilter implements GatewayFilterFactory<TestLoggingFilter.Config> {
private static final Logger LOG = LoggerFactory.getLogger(TestLoggingFilter.class);
private static final String VALUE = "value";
@Override
public Config newConfig() {
return new Config();
}
@Override
public List<String> shortcutFieldOrder() {
return Collections.singletonList(VALUE);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
LOG.info("Filter enabled with value: " + config.value);
return chain.filter(exchange);
};
}
public static class Config {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}