Spring Cloud Zuul 过滤器(Filter)深度解析
在前面的文章中我们搭建了基于 Zuul 的网关,这里不再赘述其基础作用,重点聊聊 Zuul 的 Filter 机制。通过它,我们可以灵活地拦截请求,比如只允许携带特定参数的客户端访问资源。
要实现一个自定义过滤器,核心就是继承 ZuulFilter 基类。为了演示不同场景下的过滤逻辑,我们这里构建三个具体的 Filter:按用户名校验、按密码校验以及后置处理。
1. 基础实现与生命周期
首先看最核心的前置过滤器,用于验证用户名。
package com.example.zuul;
import javax.servlet.http.HttpServletRequest;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
public class AccessUserNameFilter extends ZuulFilter {
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println(String.format("%s AccessUserNameFilter request to %s",
request.getMethod(), request.getRequestURL().toString()));
String username = request.getParameter("username");
if (null != username && username.equals("admin")) {
ctx.setSendZuulResponse(true);
ctx.setResponseStatusCode(200);
ctx.set("isSuccess", true);
return null;
} else {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode();
ctx.setResponseBody();
ctx.set(, );
;
}
}
{
;
}
{
;
}
String {
;
}
}


