目录
pom
断言:配置方式
一、application.yml
二、配置类
过滤Filter
实现两个接口:
pom
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
断言:配置方式
一、application.yml
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #路由id无固定规则,要求唯一
# uri: http://localhost:8001 #提供服务的路由地址
uri: lb://cloud-payment-service #动态路由
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
# uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
- After=2022-05-19T15:34:01.420+08:00[Asia/Shanghai] #生效时间
# - Before= 之前
# - Between= 之间
# - Cookie=username,ppp #是否带上cookie
# - Header=X-Request-Id, d+ #请求头要有X-Request-Id并且值为正整数
# - Method=Get 请求为get时候允许访问
# - Host=**.test.com 需要带着 test.com
# - Query=username, d+ 需要携带username参数并且值为正数
eureka:
instance:
hostname: cloud-gateway-service
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
二、配置类
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("paths1",
r->r.path("/guonei")
.uri("https://news.baidu.com/guonei")).build();
return routes.build();
}
}
过滤Filter
实现两个接口:
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
//自定义过滤器
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("this is MyLogGatewayFilter" + new Date());
//是否携带参数uname
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("用户名为空");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
} else {
return chain.filter(exchange);
}
}
//加载过滤器的顺序,越小越高
@Override
public int getOrder() {
return 0;
}
}
一、application.yml
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #路由id无固定规则,要求唯一
# uri: http://localhost:8001 #提供服务的路由地址
uri: lb://cloud-payment-service #动态路由
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
# uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
- After=2022-05-19T15:34:01.420+08:00[Asia/Shanghai] #生效时间
# - Before= 之前
# - Between= 之间
# - Cookie=username,ppp #是否带上cookie
# - Header=X-Request-Id, d+ #请求头要有X-Request-Id并且值为正整数
# - Method=Get 请求为get时候允许访问
# - Host=**.test.com 需要带着 test.com
# - Query=username, d+ 需要携带username参数并且值为正数
eureka:
instance:
hostname: cloud-gateway-service
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
二、配置类
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("paths1",
r->r.path("/guonei")
.uri("https://news.baidu.com/guonei")).build();
return routes.build();
}
}
过滤Filter
实现两个接口:
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
//自定义过滤器
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("this is MyLogGatewayFilter" + new Date());
//是否携带参数uname
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("用户名为空");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
} else {
return chain.filter(exchange);
}
}
//加载过滤器的顺序,越小越高
@Override
public int getOrder() {
return 0;
}
}
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #路由id无固定规则,要求唯一
# uri: http://localhost:8001 #提供服务的路由地址
uri: lb://cloud-payment-service #动态路由
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
# uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
- After=2022-05-19T15:34:01.420+08:00[Asia/Shanghai] #生效时间
# - Before= 之前
# - Between= 之间
# - Cookie=username,ppp #是否带上cookie
# - Header=X-Request-Id, d+ #请求头要有X-Request-Id并且值为正整数
# - Method=Get 请求为get时候允许访问
# - Host=**.test.com 需要带着 test.com
# - Query=username, d+ 需要携带username参数并且值为正数
eureka:
instance:
hostname: cloud-gateway-service
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("paths1",
r->r.path("/guonei")
.uri("https://news.baidu.com/guonei")).build();
return routes.build();
}
}
过滤Filter
实现两个接口:
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
//自定义过滤器
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("this is MyLogGatewayFilter" + new Date());
//是否携带参数uname
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("用户名为空");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
} else {
return chain.filter(exchange);
}
}
//加载过滤器的顺序,越小越高
@Override
public int getOrder() {
return 0;
}
}
import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered;
//自定义过滤器
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("this is MyLogGatewayFilter" + new Date());
//是否携带参数uname
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("用户名为空");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
} else {
return chain.filter(exchange);
}
}
//加载过滤器的顺序,越小越高
@Override
public int getOrder() {
return 0;
}
}



