public class LoginFilter extends ZuulFilter {
@Override // 过滤器的类型 pre route post error
public String filterType() {
return "pre";
}
@Override // 执行顺序,返回值越小,优先级越高,为防止以后有更优先的过滤器,可以先写10
public int filterOrder() {
return 0;
}
@Override // 是否执行该过滤器
public boolean shouldFilter() {
return true;
}
@Override // 编写过滤器的业务逻辑
public Object run() throws ZuulException {
// 初始化context上下文对象, 不像以前的 servlet spring
RequestContext context = RequestContext.getCurrentContext();
// 获取request对象
HttpServletRequest request = context.getRequest();
// 获取参数
String token = request.getParameter("token");
System.out.println("token="+token);
if(StringUtils.isBlank(token)){
// 为空,拦截,不转发请求
context.setSendZuulResponse(false);
// 返回状态 成功/失败
context.setResponseStatusCode(401);
// 设置响应提示
context.setResponseBody("requset error!");
}
return null; // 返回值为null,代表该过滤器什么都不做
}
}
++++++++++
yml配置文件
server:
port: 10010
spring:
application:
name: my-zuul
zuul:
routes:
service-provider: # 路由名称,随便写,一般是服务名
path: /service-provider/** # 包含这个路径的,跳转到下面的链接
# url: http://localhost:8086
serviceId: service-provider
service-consumer: /c/**
host:
connect-timeout-millis: 3000
socket-timeout-millis: 3000
prefix: /api # 路由前缀
eureka:
client:
register-with-eureka: true
fetch-registry: true # 这两句, 写成true error:Cannot execute request on any known server
# 写成false error:Load balancer does not have available server for client
service-url:
defaultZone: http://localhost:10086/eureka
ribbon:
ReadTimeout: 12000
ConnectTimeout: 12000
eureka:
enabled: true