5.8

一、Spring Cloud Gateway 配置
搭建 API 网关统一管理微服务接口:
java
// 网关配置类
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
// 用户服务路由
.route("user-service", r -> r.path("/api/user/")
.uri("lb://user-service"))
// 订单服务路由
.route("order-service", r -> r.path("/api/order/
")
.uri("lb://order-service"))
// 商品服务路由
.route("product-service", r -> r.path("/api/product/**")
.uri("lb://product-service"))
.build();
}

// 全局过滤器示例
@Bean
public GlobalFilter loggingFilter() {
    return (exchange, chain) -> {
        ServerHttpRequest request = exchange.getRequest();
        log.info("请求路径: {}", request.getURI().getPath());
        return chain.filter(exchange);
    };
}

}
二、请求限流与认证
配置限流和 JWT 认证过滤器:
java
// 限流配置
@Bean
public KeyResolver userKeyResolver() {
return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
}

// 认证过滤器
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
String token = request.getHeaders().getFirst("Authorization");

    if (token == null || !token.startsWith("Bearer ")) {
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();
    }
    
    try {
        // 验证JWT令牌
        String username = jwtService.validateToken(token.substring(7));
        if (username == null) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        // 将用户信息添加到请求头
        ServerHttpRequest newRequest = request.mutate()
                .header("X-User-Name", username)
                .build();
        
        return chain.filter(exchange.mutate().request(newRequest).build());
    } catch (Exception e) {
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();
    }
}

@Override
public int getOrder() {
    return -100;
}

}
三、API 文档与测试
集成 Swagger 实现 API 文档:
java
// 网关Swagger配置
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.demo.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}

private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("微服务API文档")
            .description("API接口文档")
            .version("1.0.0")
            .build();
}

}

posted @ 2025-05-08 21:52  李蕊lr  阅读(11)  评论(0)    收藏  举报