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
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();
}
}

浙公网安备 33010602011771号