# After 在指定条件之后
spring:
cloud:
gateway:
routes:
- id: jd_router
uri: https://jd.com
predicates:
- Path=/jd
- After=2023-08-05T17:42:47.789-07:00【时区】
# -Before=2017-01-20T17:42:47.789-07:00[America/Denver]
# Before 在指定条件前
spring:
cloud:
gateway:
routes:
- id: jd_router
uri: https://jd.com
predicates:
- Path=/jd
- Before=2023-08-05T17:42:47.789-07:00
# Between 在指定条件之间
spring:
cloud:
gateway:
routes:
- id: between_route
uri: https://example.org
predicates:
- Between=2017-01-20T17:42:47.789-07:00, 2017-01-21T17:42:47.789-07:00
# Cookie
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://example.org
predicates:
- Cookie=name,gao
# Header 请求头
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
# 多个数据(正则),如果多个head 是与的关系,满足一的条件切比如满足二
- Header=X-Request-Id, \d+
# 匹配请求头以 Authorization 开头的正则
- Header=Authorization, ^Bearer [a-zA-Z0-9._-]+=*$
# Host ip
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Host=aaa.com:9000
# Method 请求方式
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Method=GET,POST
# PATH 路径
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Path=/bd
# Query 请求参数
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
# 请求参数以name,并且参数 gr开头的
- Query=name,gr.+
# 请求参数有 size
- Query=size
# Weight 权重
Weight 组,在下面的例子中,同一个组, 哪个权重越大哪个进入的最高
spring:
cloud:
gateway:
routes:
- id: jd_router
uri: https://jd.com
predicates:
- Path=/jd
- Weight=group1, 8
- id: baidu_router
uri: https://bd.com
predicates:
- Path=/**
- Weight=group1, 2
# 自定义工厂
# 自定义Auth认证
# 自定义认证请求头
- 新建类并继承 AbstractRoutePredicateFactory 注意命名,因为在配置文件中根据名称
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
@Component
public class AuthRoutePredicateFactory extends AbstractRoutePredicateFactory<AuthRoutePredicateFactory.Config> {
public AuthRoutePredicateFactory() {
super(Config.class);
}
@Override
public List<String> shortcutFieldOrder() {
//这两个和config 里面进行对应
return Arrays.asList("username", "password");
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return serverWebExchange -> {
//获取所有的headers
HttpHeaders headers = serverWebExchange.getRequest().getHeaders();
//一个请求头包含多个value
List<String> passwords = headers.get(config.getUsername());
//只要请求头多个密码,包含了配置文件中指定的密码,就通过
return passwords.contains(config.getPassword());
};
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Config {
private String username;
private String password;
}
}
- 配置文件
spring:
cloud:
gateway:
routes:
- id: jd_router
uri: https://jd.com
predicates:
- Path=/jd
- Auth=zhangsan,123