SpringCloud 面试题, Spring Cloud Gateway
SpringCloud 面试题, Spring Cloud Gateway
QA
Step 1
Q:: 什么是Spring Cloud Gateway?
A:: Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关服务,它可以作为微服务架构中的网关,处理请求路由、安全验证、负载均衡等功能。它基于 Spring Framework 5.0、Spring Boot 2.0
和 Project Reactor,并且支持异步的非阻塞请求处理。
Step 2
Q:: Spring Cloud Gateway 与 Zuul 的区别是什么?
A:: Spring Cloud Gateway 是 Spring Cloud 生态系统中 Zuul 的替代方案。与基于阻塞的 Zuul 1
相比,Spring Cloud Gateway 基于 Reactor 模型,提供了非阻塞的请求处理,这使得它在高并发情况下表现更好。此外,Spring Cloud Gateway 集成了更多 Spring 生态系统中的功能,如 Spring Security、Spring Boot 等,而 Zuul 需要更多的定制和配置。
Step 3
Q:: 如何在 Spring Cloud Gateway 中配置路由?
A:: 在 Spring Cloud Gateway 中,可以通过配置文件(如 application.yml)或编程方式(如 Java 代码)配置路由。一个基本的路由配置通常包含 ID、URI 和一组 predicates 和 filters。例如,在 application.
yml 中可以这样配置:
spring:
cloud:
gateway:
routes:
- id: example_route
uri: http://example.org
predicates:
- Path=/example/**
filters:
- StripPrefix=1
Step 4
Q:: Spring Cloud Gateway 中的 Predicate 是什么?
A:: Predicate 是用于匹配请求条件的断言。它们根据请求的不同属性(如路径、方法、头部信息、参数等)进行匹配,决定请求是否符合路由的条件。例如,Path=/example/**
是一个路径匹配断言,它会匹配所有路径以 /example/
开头的请求。
Step 5
Q:: Spring Cloud Gateway 中的 Filter 是什么?
A:: Filter 是用于对请求或响应进行修改的处理器。它们可以在请求被转发到下游服务之前或在响应返回给客户端之前对其进行处理。常见的过滤器有认证过滤器、限流过滤器、日志记录过滤器等。例如,StripPrefix=1
是一个过滤器,它会从请求路径中去掉第一个路径段。
Step 6
Q:: 如何在 Spring Cloud Gateway 中实现全局过滤器?
A:: 全局过滤器在 Spring Cloud Gateway 中会应用到所有路由中。要实现全局过滤器,可以通过实现 GlobalFilter 接口来定制过滤逻辑。以下是一个简单的示例:
@Component
public class CustomGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 在这里实现过滤逻辑
return chain.filter(exchange);
}
}
Step 7
Q:: Spring Cloud Gateway 如何实现身份验证和授权?
A:: Spring Cloud Gateway 通常与 Spring Security 集成来实现身份验证和授权。可以通过添加认证过滤器(如 OAuth2
登录过滤器、JWT 令牌验证过滤器等)来保护路由。示例配置:
spring:
cloud:
gateway:
routes:
- id: secure_route
uri: http://secure-service
predicates:
- Path=/secure/**
filters:
- JwtAuthenticationFilter