zuul过滤器类型:
- PRE:请求被路由之前被调用,身份验证
- ROUTING:将请求路由到微服务。
- POST:路由到微服务之后执行
- ERROR:在其他阶段发生错误时执行。
zuul实现filter的方法:
- filterType:返回过滤器的类型:pre、route、post、error
- filterOrder:返回int值,来确定filter的执行顺序,不同的过滤器允许返回相同的数字
- shouldFilter:返回boolean确定filter是否执行
- run:过滤器执行内容
PerFilter过滤器类代码如下:
package com.accp.qqzuul.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component //注册过滤器
public class PerFilter extends ZuulFilter {
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;//过滤器类型
}
@Override
public int filterOrder() {
return 1;//设置优先级为1,数字越小,优先级越高
}
@Override
public boolean shouldFilter() {
return true; //是否启用该过滤器,true为启用,false为不启用
}
@Override
public Object run() { //过滤器执行的内容
RequestContext cxt = RequestContext.getCurrentContext();//请求的上下文
HttpServletRequest request = cxt.getRequest();//获取requst对象
String token = request.getHeader("token");//获取头部信息
if(null == token|| "".equals(token)){
cxt.setSendZuulResponse(false);//不执行
cxt.setResponseStatusCode(401);//返回状态码401
cxt.setResponseBody("{\"msg\":\"令牌还没带来!\"}");//返回一个json数据
System.out.println("令牌没有---");
}
return null;
}
}
yml.文件配置禁用过滤器: SecondFilter是你的过滤器名称,per是过滤器的类型, disable为true表示禁用
#禁用SecondFilter过滤器
SecondFilter:
pre:
disable: true