Spring cloud 我们如何在SpringCloudGateway中有条件地路由到不同的URL?有参考样品吗?

Spring cloud 我们如何在SpringCloudGateway中有条件地路由到不同的URL?有参考样品吗?,spring-cloud,spring-cloud-gateway,Spring Cloud,Spring Cloud Gateway,尝试有条件地更改exchange目标URL。在SpringCloudGateway中有没有一种方法可以实现这一点 为了详细说明,在检查传入请求中的特定cookie值时,我希望将其路由到不同的URL 我们对请求头执行类似的操作。我们有一个可以正确设置uri的方法,您只需从ServerWebExchange确定uri即可 public class CookieToRequestUriGatewayFilterFactory extends AbstractChangeRequestU

尝试有条件地更改exchange目标URL。在SpringCloudGateway中有没有一种方法可以实现这一点


为了详细说明,在检查传入请求中的特定cookie值时,我希望将其路由到不同的URL

我们对请求头执行类似的操作。我们有一个可以正确设置uri的方法,您只需从
ServerWebExchange
确定uri即可

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;
            }
        });
    }
}
公共类CookietoreQuestRegatewayFilterFactory扩展
AbstractChangeRequestUriGatewayFilterFactory{
专用最终记录器日志=LoggerFactory
.getLogger(RequestHeaderToRequestUriGatewayFilterFactory.class);
公共请求HeaderToRequestUrigatewayFilterFactory(){
super(NameConfig.class);
}
@凌驾
公共列表shortcutFieldOrder(){
返回Arrays.asList(NAME_KEY);
}
@凌驾
受保护的可选determineRequestUri(服务器WebExchange、,
名称(配置){
字符串cookieValue=exchange.getRequest().getCookies().getFirst(config.getName());
字符串requestUrl=determinuteUrlFromCookie(cookieValue);
返回可选的.ofNullable(requestUrl).map(url->{
试一试{
返回新的URL(URL.toURI();
}
捕获(格式错误的DurLexException | URISyntaxException e){
info(“请求url无效:url={},错误={}”,requestUrl,
e、 getMessage());
返回null;
}
});
}
}
实现
determineUrlFromCookie()
将取决于您