Zuul网关的filter 过滤

@Component
public class MyFilter extends ZuulFilter{
private static Logger log = LoggerFactory.getLogger(MyFilter.class);
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@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;
}
}

前面的几个方法就不详细说下功能了,捡着主要的说。

首先是shouldFilter() 当它返回false时,过滤器的run()方法不进行,直接通过当前过滤器。

当shouldFilter() 当它返回true时,会进入run()方法进行过滤解析操作。

可以在shouldFilter()添加拦截和不拦截的判断

if(requestPath.contains("/login")){
    log.info("------------login拦截------------------");
    return true;
}
if(requestPath.contains("/login")){
    log.info("------------login不拦截------------------");
    return false;
}

猜你喜欢

转载自blog.csdn.net/ASZJBGD/article/details/82858968