1. Zuul请求过滤
Zuul允许用户在网关上自定义过滤器实现对请求的拦截和过滤,只需要继承抽象类ZuulFilter并实现4个方法即可。
1.1 过滤器类型与生命周期
| 过滤器类型 | 说明 |
|---|---|
| pre | 在请求被路由(转发)前调用 |
| route | 在请求被路由(转发)时调用 |
| post | 请求被路由(转发)后调用 |
| error | 网关发生异时调用 |

1.2 Zuul请求过滤实现
- 在路由转发的基础上实现
- 新建
com.xyz.microservice.filter.MyFilter自定义过滤器
@Component
@Log4j2
public class MyFilter extends ZuulFilter {
/**
* 指定过滤器的类型,可以是pre/route/post/error
* @return String
*/
@Override
public String filterType() {
return "pre";
}
/**
* 指定过滤器的优先级,数据越小,优先级越高
* @return int
*/
@Override
public int filterOrder() {
return 0;
}
/**
* 判断是否开启此过滤器,true-是,false-否
* @return boolean
*/
@Override
public boolean shouldFilter() {
return true;
}
/**
* 过滤器的具体逻辑
* @return
* @throws ZuulException
*/
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.info("send {} request to {}", request.getMethod(), request.getRequestURL().toString());
Object accessToken = request.getParameter("accessToken");
if( accessToken == null) {
log.warn("access token is empty");
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
return null;
}
log.info("access token ok");
return null;
}
}
- 验证
- 访问
http://localhost:6001/xyz/mydept/provider/list?accessToken=100返回401错误 - 访问
http://localhost:6001/xyz/mydept/provider/list日志显示OK,成功访问到对应的微服务