尝试有条件地更改交换目标 URL。有没有办法在 Spring Cloud Gateway 中实现这一点?
详细地说,在检查传入请求中的特定 cookie 值时,我想将其路由到不同的 URL。
尝试有条件地更改交换目标 URL。有没有办法在 Spring Cloud Gateway 中实现这一点?
详细地说,在检查传入请求中的特定 cookie 值时,我想将其路由到不同的 URL。
我们在这里对请求标头做类似的事情。我们有一个抽象过滤器可以正确设置 uri,您只需从ServerWebExchange
.
public class CookieToRequestUriGatewayFilterFactory extends
AbstractChangeRequestUriGatewayFilterFactory<AbstractGatewayFilterFactory.NameConfig> {
private final Logger log = LoggerFactory
.getLogger(RequestHeaderToRequestUriGatewayFilterFactory.class);
public RequestHeaderToRequestUriGatewayFilterFactory() {
super(NameConfig.class);
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList(NAME_KEY);
}
@Override
protected Optional<URI> determineRequestUri(ServerWebExchange exchange,
NameConfig config) {
String cookieValue = exchange.getRequest().getCookies().getFirst(config.getName());
String requestUrl = determineUrlFromCookie(cookieValue);
return Optional.ofNullable(requestUrl).map(url -> {
try {
return new URL(url).toURI();
}
catch (MalformedURLException | URISyntaxException e) {
log.info("Request url is invalid : url={}, error={}", requestUrl,
e.getMessage());
return null;
}
});
}
}
由你来实施determineUrlFromCookie()
。