01.创建一个spring initialize的工程
创建的时候之间勾上cloud routing中的zuul,会自动导入zuul的依赖。
02.配置application.yml
//基本配置
spring:
application:
name: gateway-zuul
server:
port: 7600
//注册zuul网关到eureka
eureka:
client:
service-url:
defaultZone: http://root:123456@localhost7776/eureka/
//zuul相关的设定
zuul:
routes:
user-consumer:/user/** //表示拦截user-consumer这个client中的所有以user开头的请求,这样访问地址就是localhost:7600/user/xx xx表示user-consumer中的接口名字。
xxxx-consumer:/xxxx/**
SecondFilter //关闭第二个过滤器
pre:
disable:true
03.添加注解
@SpringBootApplication
@EnableZuulProxy
public static GateGatewayZuulApplication{
}
04.网关中的过滤器的使用
@Component //注册组件到spring的容器
public class PreFilter extends ZuulFilter {
@Override
public Object run() {
//请求信息的封装类
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String token = request.getHeader(s: "token");
if (token == null || token.equals("")) {
ctx.setSendZuulResponse(false);
ctx.setResponsStatusCode(401);
ctx.setResponseBody("{\"mes\":\"401,access without permission\"}");
return “access denied”;
}
return “pass”;
//String username = request.getParameter("username");// 获取请求的参数
}
@Override
public boolean shouldFilter() {
return true;// 是否执行该过滤器,此处为true,说明需要过滤
//当然有可能有这样的逻辑 动态获取这个状态
//首先可以在优先级高的Filter中设置zuulResponse为false
//RequestContext ctx = RequestContext.getCurrentContext();
//ctx.setSendZuulResponse(false);
//其次从这里可以动态取
return ctx.sendZuulResponse();
//也可以在优先级高的Filter中设置参数
ctx.set("thirdfilter",false);
return ctx.sendZuulResponse() && (Boolean)ctx.get("thirdfilter")
}
@Override
public int filterOrder() {
return 0;// 优先级为0,数字越大,优先级越低
}
@Override
public String filterType() {
//return "pre";// 前置过滤器,另外filterT雨棚还有route,post,error。
return FilterConstants.PRE_TYPE;
}
}
网友评论