1、跑后端的时候要把数据库跑起来,否则会报错。
2、predicate断言:
预言:predict
3、gateway:出路口
4、API:List.of("a", "b", "c");把abc编程一个集合。
5、
6、shortcutFieldOrder定义了yaml的顺序:
7、思考以下问题,为什么PrintAnyGatewayFilterFactory类没有直接调用getConfigClass类,却保留了下来?
答案:因为它们是通过Spring Cloud Gateway 框架内部机制 完成的
java
@Component
public class PrintAnyGatewayFilterFactory // 父类泛型是内部类的Config类型
extends AbstractGatewayFilterFactory<PrintAnyGatewayFilterFactory.Config> {
@Override
public GatewayFilter apply(Config config) {
// OrderedGatewayFilter是GatewayFilter的子类,包含两个参数:
// - GatewayFilter:过滤器
// - int order值:值越小,过滤器执行优先级越高
return new OrderedGatewayFilter(new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取config值
String a = config.getA();
String b = config.getB();
String c = config.getC();
// 编写过滤器逻辑
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
// 放行
return chain.filter(exchange);
}
}, 100);
}
// 自定义配置属性,成员变量名称很重要,下面会用到
@Data
static class Config{
private String a;
private String b;
private String c;
}
// 将变量名称依次返回,顺序很重要,将来读取参数时需要按顺序获取
@Override
public List<String> shortcutFieldOrder() {
return List.of("a", "b", "c");
}
// 返回当前配置类的类型,也就是内部的Config
@Override
public Class<Config> getConfigClass() {
return Config.class;
}
}
8、这是个啥?
GatewayFilter 是一个 接口(Interface) ,正常情况下接口不能直接 new,必须提供实现类。
但通过 匿名内部类 ,你可以 直接实现接口的方法 ,而不用单独写一个类文件。
相当于是:GatewayFilterEntity gatewayFilterEntity

9、ServerWebExchange exchange包含:exchange.getRequest()、exchange.getResponse()、exchange.getAttributes()、exchange.mutate()

java
(exchange, chain) -> { //例
// 示例1:获取请求头
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
// 示例2:修改请求路径
ServerWebExchange newExchange = exchange.mutate()
.request(builder -> builder.path("/new-path"))
.build();
// 示例3:拦截请求(直接返回响应)
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
10、exchange更偏向功能类。chain更多是用来链接多个要过滤的内容,比如过滤掉1、2、3、4、5就需要chain链接起来。
11、
java
//全局生效:放在gateway底下:
spring:
cloud:
gateway:
default-filters:
- PrintAny=1,2,3 # 全局生效
routes:
- id: item
uri: lb://item-service
predicates:
- Path=/items/** */
- id: cart
uri: lb://cart-service
predicates:
- Path=/carts/** */
//局部生效:放在id底下:
spring:
cloud:
gateway:
routes:
- id: item
uri: lb://item-service
predicates:
- Path=/items/** */
filters:
- PrintAny=1,2,3 # 仅对/item路由生效
- id: cart
uri: lb://cart-service
predicates:
- Path=/carts/**
12、default-filters版的GateFilter和GlobalFilter有啥区别?
13、J WT(JSON Web Token):登录时候需要