zuul配置过滤器

zuul配置过滤器

zuul过滤器类型

  • pre

    • 可以在请求被路由之前调用。适用于身份认证的场景,认证通过后再继续执行下面的流程
  • route

    • 在路由请求时被调用。适用于灰度发布场景,在将要路由的时候可以做一些自定义的逻辑。
  • post

    • 在 route 和 error 过滤器之后被调用。这种过滤器将请求路由到达具体的服务之后执行。适用于需要添加响应头,记录响应日志等应用场景。
  • error

    • 处理请求时发生错误时被调用。在执行过程中发送错误时会进入 error 过滤器,可以用来统一记录错误信息。

如何配置:继承 com.netflix.zuul.ZuulFilter

package com.yl.filter;

import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;

@Component
public class ZuulFilter extends com.netflix.zuul.ZuulFilter {

   /*
    * 指明过滤器类型,它是一个PRE过滤器
    * */
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }

   /*
    * 同一个过滤器类型的执行顺序
    * */
    @Override
    public int filterOrder() {
        return 1;
    }

   /*
    * 是否作拦截处理
    * */
    @Override
    public boolean shouldFilter() {
        return true;
    }

   /*
    * 过滤器的业务逻辑处理
    * */
    @Override
    public Object run() throws ZuulException {
        RequestContext context= RequestContext.getCurrentContext();
        //获取http的request对象
        HttpServletRequest request=context.getRequest();
        //获取请求参数:token
        String token=request.getParameter("token");

        System.out.println("zuul filter token="+token);

        //token如果有数据,并且等于1234,则允许访问,否则拦截处理
        if(token!=null && token.equals("1234")) {
            return null;
        }else {
            //如何实现拦截处理
            RequestContext ctx = RequestContext.getCurrentContext();
            //设置为false:不再转发请求到目标服务
            ctx.setSendZuulResponse(false);
            ctx.set("sendForwardFilter.ran", true);
            ctx.setResponseBody("token error");
            return null;
        }
    }
}
记得快乐
原文地址:https://www.cnblogs.com/Y-wee/p/14140448.html