java – 重定向时将标题添加到Zuul

我正在尝试使用Zuul将调用重定向到其他地方的下游系统.

在重定向中,我需要添加一个Header,其中包含接收重定向进行处理的api所需的数据.我似乎无法让下游系统检测到这些数据.附上是我的代码.

我正在使用Edgware.SR3中的Zuul,
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);
}

邮递员收到错误

{
“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” }

最佳答案 我猜你使用路由过滤器,也许你可以尝试使用预过滤器.

可以使用以下内容添加自定义标头:context.addZuulRequestHeader(“授权”,“基本”凭据);.

对于重定向部分,您可以查看此thread

点赞