java - 重定向时向 Zuul 添加 header

标签 java spring-boot spring-cloud netflix-zuul

我正在尝试使用 Zuul 将调用重定向到其他地方的下游系统。 在重定向中,我需要添加一个包含必要数据的 header ,以便 api 接收重定向以进行处理。我似乎无法让下游系统检测到这些数据。附件是我的代码。 我正在使用 Edgware.SR3, Spring Boot 1.5.12

Zuul

Zuul 过滤器

@Component
public class RouteFilter extends ZuulFilter{

@Override
public Object run() {
//Testing to add header
    context.getRequest().getParameterMap().put("api", new String[]{"api"});
    context.getResponse().setHeader("api", api);
    context.addZuulResponseHeader("api", "api");
    context.addZuulRequestHeader("api", "api");
    context.setSendZuulResponse(false);
    context.put(FORWARD_TO_KEY, redirect_urls.get(key));
    context.setResponseStatusCode(HttpStatus.SC_TEMPORARY_REDIRECT);
    context.getResponse().sendRedirect(redirect_urls.get(key));
    return null;
}
}

重定向服务代码

@RequestMapping(value = "/forward")
public ResponseEntity<String> forwardToMe(@RequestHeader(required = true, name = "api")String api){
    return new ResponseEntity<String>("Hi",HttpStatus.OK);
}

Postman 收到错误

{ "timestamp": 1524737817729, "status": 400, "error": "Bad Request", "exception": "org.springframework.web.bind.ServletRequestBindingException", "message": "Missing request header 'api' for method parameter of type String", "path": "/forward" }

最佳答案

我猜你使用了Route Filter,也许你可以尝试使用Pre Filter

添加自定义 header 可以通过以下方式完成:context.addZuulRequestHeader("Authorization", "Basic "+ credentials);

对于重定向部分,可以查看这个thread

关于java - 重定向时向 Zuul 添加 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040703/

相关文章:

java - 在 Android 操作系统上捕获未处理的 JAVA 运行时异常的最佳实践?

java - 如何对 LinkedHashMap 中的重复键值求和?

java - libgdx - 按下后退按钮时舞台被禁用

java - 为什么在作为 JAR 执行时会出现 NoSuchMethodException?

java - 跨多个服务器更新 Spring Bean 属性

asynchronous - 这个异步 HystrixCommand 有什么问题?

java - 为什么Spring Cloud @EnableSidecar使用@EnableCircuitBreaker

netbeans - GlassFish Server 4.0 与 JDK 启动错误

java - Spring Boot 使用 ConfigurationProperties 从 .properties 和 .yaml 注入(inject)映射值

mysql - Spring boot Multi-Tenancy ,一个租户连接到多个模式