学科分类
目录
Spring Cloud

自定义Zuul过滤器

前面介绍了Zuul过滤器类型和请求生命周期,下面我们动手编写一个Zuul过滤器,来实现打印用户请求的Http方法以及请求地址。

编写Zuul过滤器非常简单,只需要继承ZuulFilter,并实现 ZuulFilter中的四个抽象方法,包括filterType()、 filterOrder()、shouldFilter()和run()。具体步骤如下:

(1)在gateway-zuul项目中定义表示Zuul过滤器的PreRequestLogFilter类,如例1所示。

例1 gateway-zuul\src\main\java\com\itheima\gatewayzuul\filter\PreRequestLogFilter.java

1    public class PreRequestLogFilter extends ZuulFilter {
2        private static final Logger logger = LoggerFactory.getLogger(
3            PreRequestLogFilter.class);
4        @Override
5        public String filterType(){
6            return "pre";
7        }
8        @0verride
9        public int filter0rder(){
10            return 1;
11        }
12        @Override
13        public boolean shouldFilter(){
14            return true;
15        }
16        @Override
17        public Object run(){
18            RequestContext ctx = RequestContext.getCurrentContext();
19             HttpServletRequest request = ctx.getRequest();
20             logger.info("进入访问过滤器,访问的url:{},访问的方法:  
21             {}",request.getRequestURL(),request.getMethod());
22             String accessToken = request.getHeader("accessToken"); 
23             if(StringUtils.isEmpty(accessToken)) {
24                    logger.info("当前请求没有accessToken");
25                     ctx.setSendZuulResponse(false);
26                    ctx.setResponseStatusCode(401);
27                    return null;
28                }
29                logger.info("请求通过过滤器");
30                return null;    }
31    }

(2)启动测试。依次启动eureka-server,eureka-consumer和gateway-zuul。使用浏览器访问http://localhost:8835/eureka-consumer/hi,会在在控制台看到下列信息,如图1所示。

图1 自定义过滤器执行效果图

出现图1所示信息说明编写的自定义过滤器被执行了,并且控制台打印出了请求的Http方法以及请求地址。

点击此处
隐藏目录