1、跑后端的時候要把數據庫跑起來,否則會報錯。
2、predicate斷言:
?預言:predict
3、gateway:出路口
4、API:List.of("a", "b", "c");把abc編程一個集合。
5、
?6、shortcutFieldOrder定義了yaml的順序:
?7、思考以下問題,為什么PrintAnyGatewayFilterFactory類沒有直接調用getConfigClass類,卻保留了下來?
答案:因為它們是通過Spring Cloud Gateway 框架內部機制?完成的
@Component
public class PrintAnyGatewayFilterFactory // 父類泛型是內部類的Config類型extends AbstractGatewayFilterFactory<PrintAnyGatewayFilterFactory.Config> {@Overridepublic GatewayFilter apply(Config config) {// OrderedGatewayFilter是GatewayFilter的子類,包含兩個參數:// - GatewayFilter:過濾器// - int order值:值越小,過濾器執行優先級越高return new OrderedGatewayFilter(new GatewayFilter() {@Overridepublic 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);}// 自定義配置屬性,成員變量名稱很重要,下面會用到@Datastatic class Config{private String a;private String b;private String c;}// 將變量名稱依次返回,順序很重要,將來讀取參數時需要按順序獲取@Overridepublic List<String> shortcutFieldOrder() {return List.of("a", "b", "c");}// 返回當前配置類的類型,也就是內部的Config@Overridepublic Class<Config> getConfigClass() {return Config.class;}}
8、這是個啥?
GatewayFilter
?是一個?接口(Interface),正常情況下接口不能直接?new
,必須提供實現類。
但通過?匿名內部類,你可以?直接實現接口的方法,而不用單獨寫一個類文件。
相當于是:GatewayFilterEntity gatewayFilterEntity
9、ServerWebExchange exchange包含:exchange.getRequest()、exchange.getResponse()、exchange.getAttributes()、exchange.mutate()
?
(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、
//全局生效:放在gateway底下:
spring:cloud:gateway:default-filters:- PrintAny=1,2,3 # 全局生效routes:- id: itemuri: lb://item-servicepredicates:- Path=/items/** */- id: carturi: lb://cart-servicepredicates:- Path=/carts/** *///局部生效:放在id底下:
spring:cloud:gateway:routes:- id: itemuri: lb://item-servicepredicates:- Path=/items/** */filters:- PrintAny=1,2,3 # 僅對/item路由生效- id: carturi: lb://cart-servicepredicates:- Path=/carts/**
12、default-filters版的GateFilter和GlobalFilter有啥區別?
13、JWT(JSON Web Token):登錄時候需要