GateWay之路由转发和过滤
在一个Gateway项目(配置了eureka等组件)中进行配置
server:
port: 9006
spring:
application:
name: zhao-service-gateway
cloud:
gateway:
routes:
- id: service-autodeliver-router
#uri: http://127.0.0.1:8091
uri: lb://zhao-service-autodeliver
predicates:
- Path= /autodeliver/**
- id: service-resume-router
#uri: http://127.0.0.1:8081
uri: lb://zhao-service-resume
predicates:
- Path=/resume/**
filters:
- StripPrefix=1
通过第一个服务hao-service-autodeliver的配置形式,使用固定ip和服务名均可正常通过网关项目访问到服务,但是固定ip的方式不太灵活,而 lb://zhao-service-autodeliver可以实现随机的负载均衡,且不用填写固定ip也避免了不要的麻烦
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN4kDZ0ATNmdjMiRDZ3UTZ2YmMjVWOjNjNmhTM4gTNm9CX5EzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.png)
第二个服务配置中 filters:- StripPrefix=1这个配置会过滤掉第一个路径配置,所以我们在最后访问的时候,除了需要加上第一个过滤掉的配置,还需要加上原本的配置。访问形式如下
GateWay断言
上述针对路径的配置即是断言predicates的配置,而Gateway还内置了以下几种断言
基本上上述断言都是基于请求携带的信息进行过滤的,在实际操作过程中可以综合使用这些信息来达到我们想要的操作
GateWay自定义全局过滤器
//www.fhadmin.cn
@Component
@Slf4j
public class BlackListFilter implements GlobalFilter, Ordered{
private static final List<String> blackList=new ArrayList<>();
static {
blackList.add("0:0:0:0:0:0:0:1");//模拟本机ip地址
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response =exchange.getResponse();
String clientIp = request.getRemoteAddress().getHostString();
if (blackList.contains(clientIp)){
response.setStatusCode(HttpStatus.UNAUTHORIZED);
log.error(clientIp+"在黑名单中,拒绝访问");
String data = "request be denied";
DataBuffer wrap = response.bufferFactory().wrap(data.getBytes());
return response.writeWith(Mono.just(wrap));
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}