上篇文章已经介绍了,zuul基本的搭建,这篇文章 介绍一下自定义 Filter
首先 在 Zuul 模块中 新增加 两个java 类
zuul1Filter 内容如下:
package com.springcloud.zuul.filter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* Created by joe强 on 2018/9/27 17:26
*/
@Component
public class Zuul1Filter extends com.netflix.zuul.ZuulFilter {
@Override
public String filterType() {
return "pre"; //filterType: 表示过滤类型 枚举值:pre 表示路由之前,routing表示路由当中,post表示路由之后,error 表示路由发生错误
}
@Override
public int filterOrder() {
return 1;
} //优先级,0是最高优先级即最先执行
@Override
public boolean shouldFilter() {
return true; //写逻辑,是否要执行过滤。true会执行run函数,false不会执行
}
@Override
public Object run() throws ZuulException {
System.out.println("\"----------------this is DemoFilter----------\"");
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println(String.format("%s %s", request.getMethod(), request.getRequestURL().toString()));
Object accessToken = request.getParameter("token");
if (accessToken == null) { //判断释放有token自动 logger.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); }catch (Exception e){} return null; } return null; }
System.out.println("token is empty");
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
try {
ctx.getResponse().getWriter().write("token is empty");
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
return null;
}
}
zuul2Filter 内容:
package com.springcloud.zuul.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
/**
* Created by joe强 on 2018/9/27 17:33
*/
@Component
public class Zuul21Filter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0; //优先级,0是最高优先级 即最高执行
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
System.out.println("执行 Zuul2Filter");
return "this is Zuul2Filter";
}
}
启动 Euaeka 注册中心,server1服务 和当前Zuul 网关
调用接口:
说明自定义过滤器已经生效了!
看下控制台输出
可以看的出来 优先级也生效了!