如何使用zuul

时间:2019-02-14 14:19:46

标签: java spring servlets netflix-zuul

我在POC上工作,我需要使用zuul作为服务器来首先路由2条路由,它将正常运行,但它具有自定义的后置过滤器,该过滤器将使用第一个响应的一些数据向另一个api发送另一个请求记录 因此需要将第一个请求的响应主体提取到我的自定义帖子过滤器中,并获取一些特定的属性,但我找不到响应,因为它始终为null,但状态码为200。 我该如何等待并从响应中获取特定属性的值,并获取实际状态代码,而不仅仅是默认值200。

我尝试使用云网关进行此实现,但是我遇到了无法提取响应的相同问题。 我也试图做一个响应装饰器,但它也失败了。

@Component
public class AddResponseHeaderFilter extends ZuulFilter {
@Override
public String filterType() {
    return "post";
}

@Override
public int filterOrder() {
    return 1;
}

@Override
public boolean shouldFilter() {
    return true;
}

@Override
public Object run() {
    System.out.println("this is my filter");
    RequestContext context = RequestContext.getCurrentContext();
    HttpServletRequest request = new HttpServletRequestWrapper(context.getRequest());
    System.out.println(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));
    HttpServletResponse servletResponse = context.getResponse();
    // return an address only
    System.out.println(context.getResponseBody().toString());
    servletResponse.addHeader("X-Foo", UUID.randomUUID().toString());
    return null;
}
}

2 个答案:

答案 0 :(得分:0)

if (!$(event.target).hasClass('dropdown-select') &&!$(event.target).parents().hasClass('dropdown-select')) { 对我来说很好,我也可以操纵响应。

答案 1 :(得分:0)

import java.nio.charset.Charset;
import org.springframework.util.StreamUtils;
    
 RequestContext ctx = RequestContext.getCurrentContext();
     HttpServletRequest request = ctx.getRequest();
    String requestLog = StreamUtils.copyToString(request.getInputStream(), 
    Charset.forName("UTF-8"));