4種接口過濾方式
- 使用Spring Cloud Gateway的路由規則,在application.yml檔案中定義predicates和filters,例如:
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/login # 隻放行/user/login接口
- 使用Spring Security的配置,在application.yml檔案中定義ignoreUrls,例如:
security:
ignoreUrls:
- /user/login # 放行/user/login接口
- 使用自定義過濾器,在GatewayFilterFactory中實作自己的邏輯,例如:
public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory<AuthGatewayFilterFactory.Config> {
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
String path = exchange.getRequest().getURI().getPath();
if (path.equals("/user/login")) { // 放行/user/login接口
return chain.filter(exchange);
}
// 其他邏輯...
};
}
public static class Config {
// 配置屬性...
}
}
- 使用自定義路由倉庫,在RouteDefinitionRepository中實作自己的邏輯,例如:
public class RedisRouteDefinitionRepository implements RouteDefinitionRepository {
@Override
public Flux<RouteDefinition> getRouteDefinitions() {
// 從Redis中擷取路由定義,并根據需要放行接口...
}
@Override
public Mono<Void> save(Mono<RouteDefinition> route) {
// 儲存路由定義到Redis中...
}
@Override
public Mono<Void> delete(Mono<String> routeId) {
// 從Redis中删除路由定義...
}
}
四種方式的優缺點
- 使用Spring Cloud Gateway的路由規則,優點是簡單友善,可以在配置檔案中定義多種路由條件和過濾器,支援動态重新整理和自定義擴充;缺點是可能不夠靈活,需要遵循Spring Cloud Gateway的規範和限制。
- 使用Spring Security的配置,優點是可以利用Spring Security提供的強大的安全功能,如認證、授權、加密等;缺點是需要額外引入Spring Security依賴,并且可能與其他過濾器沖突或重複。
- 使用自定義過濾器,優點是可以實作自己的業務邏輯和需求,有更高的靈活性和可定制性;缺點是需要編寫更多的代碼,并且可能需要考慮性能、異常處理、相容性等問題。
- 使用自定義路由倉庫,優點是可以實作自己的路由存儲和管理方式,如使用Redis或資料庫等;缺點是需要編寫更多的代碼,并且可能需要考慮資料同步、緩存、事務等問題。