1

尝试有条件地更改交换目标 URL。有没有办法在 Spring Cloud Gateway 中实现这一点?

详细地说,在检查传入请求中的特定 cookie 值时,我想将其路由到不同的 URL。

4

1 回答 1

1

我们在这里对请求标头做类似的事情。我们有一个抽象过滤器可以正确设置 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()

于 2019-01-18T18:23:08.557 回答