Zuul(ZuulFilter)过滤器的关键特性有:java
@Component public class MyZuulFilterPre extends ZuulFilter { private static Logger log = LoggerFactory.getLogger(MyZuulFilterPre.class); //filterType:返回一个字符串表明过滤器的类型 @Override public String filterType() { return FilterConstants.PRE_TYPE; //pre:路由以前 route:路由之时 post: 路由以后 error:发送错误调用 } //filterOrder:过滤的顺序 @Override public int filterOrder() { return 0; } //这里能够写逻辑判断,是否要过滤,本文true,永远过滤 @Override public boolean shouldFilter() { return true; } //过滤器的具体逻辑。判断该请求到底有没有权限访问。 @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); if (accessToken == null) { log.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); } catch (Exception e) { } return null; } log.info("ok"); return null; } }
测试结果:app
Zuul中定义了四种标准的过滤器类型,这些过滤器类型对应于请求的典型生命周期。ide
PRE
过滤器: 在请求被路由以前调用, 可用来实现身份验证、在集群中选择请求的微服务、记录调试信息等;ROUTING
过滤器: 在路由请求时候被调用;POST
过滤器: 在路由到微服务之后执行, 可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等;ERROR
过滤器: 在处理请求过程时发生错误时被调用。除了上面给出的四种默认的过滤器类型以外,Zuul还容许咱们建立自定义的过滤器类型。(暂没尝试)微服务
只须要在application.properties(或yml)中配置须要禁用的filter,格式为:zuul.[filter-name].[filter-type].disable=true
post
zuul.MyZuulFilterPre.pre.disable=true
连接:https://www.jianshu.com/p/f786a11a2def
來源:简书测试