自定义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方法以及请求地址。