天天看點

SpringCloud Gateway放行接口的4種方式

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或資料庫等;缺點是需要編寫更多的代碼,并且可能需要考慮資料同步、緩存、事務等問題。

繼續閱讀