gateway的filter报错,求解答

@Component
public class WebsocketHandler implements GlobalFilter, Ordered {

private final static String DEFAULT_FILTER_PATH = "/deng/info";

/**
 *
 * @param exchange ServerWebExchange是一个HTTP请求-响应交互的契约。提供对HTTP请求和响应的访问,
 *                 并公开额外的 服务器 端处理相关属性和特性,如请求属性
 * @param chain
 * @return
 */
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  
    URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
   
    String scheme = requestUrl.getScheme();
   
    if (!"ws".equals(scheme) && !"wss".equals(scheme)) {
        return chain.filter(exchange);
    } else if (DEFAULT_FILTER_PATH.equals(requestUrl.getPath())) {
        String wsScheme = convertWsToHttp(scheme);
        URI wsRequestUrl = UriComponentsBuilder.fromUri(requestUrl).scheme(wsScheme).build().toUri();
        exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, wsRequestUrl);
    }
    return chain.filter(exchange);
}

@Override
public int getOrder() {
    return 6;
}

static String convertWsToHttp(String scheme) {
    scheme = scheme.toLowerCase();
    return "ws".equals(scheme) ? "http" : "wss".equals(scheme) ? "https" : scheme;
}

}

java.lang.IllegalArgumentException: Required attribute 'org.springframework.cloud.gateway.support.ServerWebExchangeUtils.gatewayRequestUrl' is missing.

at org.springframework.util.Assert.notNull(Assert.java:193) ~[spring-core-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at org.springframework.web.server.ServerWebExchange.getRequiredAttribute(ServerWebExchange.java:83) ~[spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at com.yss.gateway.filter.WebsocketHandler.filter(WebsocketHandler.java:29) ~[classes/:na]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:133) ~[spring-cloud-gateway-core-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-core-2.0.0.RELEASE.jar:2.0.0.RELEASE]### 问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.9k
1 个回答
新手上路,请多包涵

URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);

改成

URI requestUrl = exchange.getRequest().getURI();

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题