Spring Cloud Zuul –编写过滤器

Netflix OSS项目Zuul充当后端服务的网关,并支持添加安全性,路由等边缘功能。 在Zuul世界中,称为Zuul过滤器的组件提供了特定的边缘功能,为基于Spring Cloud的项目编写这种过滤器非常简单。 此处提供了添加过滤器的良好参考。 在这里,我想演示两个小功能–确定过滤器是否应对请求执行操作,其次要在转发请求之前添加标头。

编写Zuul过滤器

对于Spring Cloud而言 ,编写Zuul过滤器非常容易,我们需要做的就是添加一个实现ZuulFilter的Spring bean,因此在此示例中,它看起来像这样:

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.springframework.stereotype.Service;


@Service
public class PayloadTraceFilter extends ZuulFilter {

    private static final String HEADER="payload.trace";

    @Override
    public String filterType() {
        return "pre";
    }

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

    @Override
    public boolean shouldFilter() {
      ....   
    }

    @Override
    public Object run() {
     ....
    }
}

此实现的一些高级细节,已将其标记为“ pre”的“过滤器类型”,这意味着将在将请求分派到后端服务之前调用此过滤器,filterOrder确定何时在服务器中调用此特定过滤器过滤器链,过滤器应确定是否为此请求完全调用此过滤器,并且运行包含过滤器的逻辑。

因此,就我的第一个考虑而言,此过滤器是否应完全作用于流-可以在逐个请求的基础上完成,我的逻辑很简单-如果请求uri以/ samplesvc开头,则此过滤器应对请求起作用。

@Override
public boolean shouldFilter() {
    RequestContext ctx = RequestContext.getCurrentContext();
    String requestUri = ctx.getRequest().getRequestURI();
    return requestUri.startsWith("/samplesvc");
}

关于修改后端服务的请求标头的第二个注意事项:

@Override
public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.addZuulRequestHeader("payload.trace", "true");
    return null;
}

获得此类请求的支持服务可以查找标头并采取相应的措施,例如,在这种特定情况下,请查看“ payload.trace”标头并决定记录传入的消息:

@RequestMapping(value = "/message", method = RequestMethod.POST)
public Resource<MessageAcknowledgement> pongMessage(@RequestBody Message input, @RequestHeader("payload.trace") boolean tracePayload) {
    if (tracePayload) {
        LOGGER.info("Received Payload: {}", input.getPayload());
    }
....

结论

如此处所示,Spring Cloud确实很容易为任何边缘需求添加Zuul过滤器。 如果您想进一步探索此样本,我可以在
我的github仓库

翻译自: https://www.javacodegeeks.com/2016/07/spring-cloud-zuul-writing-filter.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值