文章目录
1. 过滤器
/**
* Created by rongyaowen
* on 2019/8/22.
* zuul的第二个功能,统一过滤
* 请求过来以后,首先通过tomcat的过滤器,如果是对DispatcherServletd的请求,那么会通过springmvc的拦截器
* 如果是路由,则不会通过拦截器,会经过ZUUL的过滤器
*/
@Component
public class TokenFilter extends ZuulFilter {
/**
* 过滤类型
* <p>
* pre:路由之前
* routing:路由之时
* post: 路由之后
* error:发送错误调用
*
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* 过滤顺序
* 多个filter时,可以通过这边来执行顺序
*
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
* 是否需要过滤
*
* @return true 需要过滤
*/
public boolean shouldFilter() {
return true;
}
/**
* 具体的过滤逻辑
*
* @return
* @throws ZuulException
*/
public Object run() throws ZuulException {
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) {
System.out.println(("token is empty"));
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
try {
ctx.getResponse().getWriter().write("token is empty");
} catch (Exception e) {
}
return null;
}
return null;
}
}
filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
pre:路由之前
routing:路由之时
post: 路由之后
error:发送错误调用
filterOrder:过滤的顺序
shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。