相关疑难解决方法(0)

如何根据 Zuul 中的标头选择路由

我在服务 A 和 B 前使用 Netflix Zuul 代理。

如何让 Zuul 代理根据传入请求中的 HTTP 标头在 A 和 B 的路由之间进行选择?

netflix-zuul spring-cloud-netflix

6
推荐指数
1
解决办法
5864
查看次数

重定向时将标题添加到Zuul

我试图用来Zuul将呼叫重定向到其他地方的下游系统。在api重定向中,我需要在Header中添加必要的数据,以接收要处理的重定向。我似乎无法让下游系统检测到此数据。附件是我的代码。我使用ZuulEdgware.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;
}
}
Run Code Online (Sandbox Code Playgroud)

重定向服务代码

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

邮递员中收到错误

{“ timestamp”:1524737817729,“ status”:400,“ error”:“ Bad Request”,“ exception”:“ org.springframework.web.bind.ServletRequestBindingException”,“ message”:“缺少请求标头'api'类型为String的方法参数“,” path“:” / forward“}

java spring-boot spring-cloud netflix-zuul

6
推荐指数
1
解决办法
8542
查看次数

向来自 Netflix Zuul 预过滤器的请求正文添加一个新字段

我正在尝试在 Zuul 预过滤器中向请求正文添加一个新字段。

我正在使用这里的 Neflix 的 Zuul 示例项目之一,我的过滤器的实现与UppercaseRequestEntityFilter此示例非常相似。

我能够应用诸如大写的转换,甚至完全修改请求,唯一不方便的是我无法修改长度超过正文请求原始长度的正文请求的内容。

这是我的过滤器的实现:

@Component
public class MyRequestEntityFilter extends ZuulFilter {
    public String filterType() {
        return "pre";
    }

    public int filterOrder() {
        return 10;
    }

    public boolean shouldFilter() {
        RequestContext context = getCurrentContext();
        return true;
    }

    public Object run() {
        try {
            RequestContext context = getCurrentContext();
            InputStream in = (InputStream) context.get("requestEntity");
            if (in == null) {
                in = context.getRequest().getInputStream();
            }

            String body = StreamUtils.copyToString(in, Charset.forName("UTF-8"));

            body = body.replaceFirst("qqq", "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq");

            // …
Run Code Online (Sandbox Code Playgroud)

filter netflix netflix-zuul

3
推荐指数
1
解决办法
1724
查看次数