携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
今天我们来学习一下网关过滤器和网关的其他配置,小伙伴们跟着我一起开始学习啦。
1.配置网关前缀和url相关配置
在good-zuul的resources/application.properties编辑文件
#配置网关前缀
zuul.prefix=/imooc
#good-list服务
#网关访问地址
zuul.routes.good-list.path=/list/**
#定义服务ID
zuul.routes.good-list.service-id=good-list
#good-price 服务
zuul.routes.good-price.path=/price/**
zuul.routes..good-price.service-id=good-price
1.1重启网关服务ZuulGatewayApplication
1.2测试
good-list服务
http://localhost:9000/imooc/list/goods
good-price服务
http://localhost:9000/imooc/price/goodsAndPrice
2.网关过滤器
2.1在com.imooc.good新增filter包,专门用来处理网关过滤
2.2新建PreRequestFilter类,用来处理网关请求之前的过滤请求
@Component
public class PreRequestFilter extends ZuulFilter {
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
return 5;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext currentContext = RequestContext.getCurrentContext();
System.out.println(currentContext.getRequest().getRequestURI());
return null;
}
}
解释一下代码:
@Component 表示该类是组件
filterType 表示该网关方法是请求之前的
filterOrder 通过int值来定义过滤器的执行顺序,数值越小优先级越高
shouldFilter 处理过滤条件
Object run() 用来处理业务逻辑,比如想要获取地址栏参数等
获取地址栏uri
RequestContext currentContext = RequestContext.getCurrentContext();
System.out.println(currentContext.getRequest().getRequestURI());
2.3编写好网关服务我们重启服务并且访问url地址
http://localhost:9000/imooc/price/goodsAndPrice
可以发现控制台打印出uri地址信息
2.4新建PostRequestFilter类,用来处理Post请求之后的过滤
@Component
public class PostRequestFilter extends ZuulFilter {
@Override
public String filterType() {
return FilterConstants.POST_TYPE;
}
@Override
public int filterOrder() {
return FilterConstants.SEND_RESPONSE_FILTER_ORDER-1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext currentContext = RequestContext.getCurrentContext();
System.out.println(currentContext.getResponse().getStatus());
return null;
}
}
代码说明:
获取post请求之后的status:
RequestContext currentContext = RequestContext.getCurrentContext();
System.out.println(currentContext.getResponse().getStatus());
2.5编写好网关服务我们重启服务并且访问url地址
http://localhost:9000/imooc/price/goodsAndPrice
返回了后置post的状态码