spring-cloud - Spring Cloud Gateway 注入(inject)头

标签 spring-cloud spring-cloud-gateway

在 GatewayFilter 中,我试图将 header 注入(inject)到请求中,如下所示。
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { //DO SOME AUTHORIZATION OPERATIONS String jwt = "xxxxx" exchange.getRequest().getHeaders().add("headerkey", jwt); return chain.filter(exchange); }
但我收到以下错误:

java.lang.UnsupportedOperationException: null
at java.util.Collections$UnmodifiableMap.computeIfAbsent(Collections.java:1535) ~[na:1.8.0_111]
at org.springframework.http.HttpHeaders.add(HttpHeaders.java:1425) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at com.trimble.sample.springcloudgateway.filter.AuthGatewayFilter.filter(AuthGatewayFilter.java:30) ~[classes/:na]
at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:103) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]
at org.springframework.cloud.gateway.filter.NettyWriteResponseFilter.filter(NettyWriteResponseFilter.java:62) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:121) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]
at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:103) ~[spring-cloud-gateway-core-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]

最佳答案

以下代码有效:

ServerHttpRequest request = exchange.getRequest()
                .mutate()
                .header("x-jwt-assertion", jwt)
                .build();
ServerWebExchange exchange1 = exchange.mutate().request(request).build();
            return chain.filter(exchange1);

关于spring-cloud - Spring Cloud Gateway 注入(inject)头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49845335/

相关文章:

java - Spring Cloud 和 Spring OAuth2 - EnableGlobalMethodSecurity 抛出 AlreadyBuiltException

java - Spring Cloud Gateway 自动路由到 Eureka 服务

ssl - 无法使用 spring 云网关从 http 请求路由到 https 请求

aws-sdk - Spring Cloud AWS SQS 删除策略

java - Spring Cloud Gateway在调用spring oauth2授权服务器时卡住

java - 我们可以在Spring云流应用程序启动器中使用WebSocket接收器作为WebSocket源吗?

spring-boot - 如何在Jboss或Tomcat上部署Spring Cloud Gateway 2.1?

java - 多模块项目的 Spring Cloud 客户端配置

spring - 如何在Spring Cloud Gateway中获取请求体并添加Header

spring-boot - 使用 SSL 的 Spring Cloud Gateway 无法按名称路由到服务