Spring cloud 我们如何在SpringCloudGateway中有条件地路由到不同的URL?有参考样品吗?
尝试有条件地更改exchange目标URL。在SpringCloudGateway中有没有一种方法可以实现这一点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
为了详细说明,在检查传入请求中的特定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()
将取决于您