【发布时间】:2018-10-07 00:26:33
【问题描述】:
我正在尝试使用Zuul 将调用重定向到其他地方的下游系统。
在重定向中,我需要添加一个包含必要数据的标题,以便api 接收重定向以进行处理。我似乎无法让下游系统检测到这些数据。附上我的代码。
我正在使用来自Edgware.SR3, Spring Boot 1.5.12的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 中收到错误
{ “时间戳”:1524737817729, “状态”:400, "error": "错误请求", “异常”:“org.springframework.web.bind.ServletRequestBindingException”, "message": "String 类型的方法参数缺少请求标头 'api'", "路径": "/forward" }
【问题讨论】:
-
sendRedirect不会传递您提供的任何自定义标头。context.addZuulXXXHeader仅用于正常路由。 -
谢谢,我注意到了。因此询问是否有人在 Zuul Redirects 中操作标头的经验更好。
标签: java spring-boot spring-cloud netflix-zuul