首先,报错处理。
@Configuration
public class MvcInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserinfoInterceptor());
}
}
会报错。这是因为 Spring MVC 和 Spring Gateway 冲突。
网关 webflux
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Spring MVC
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
或者

解决办法,让 interceptor在仅在 MVC 框架生效。
java
@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class MvcInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserinfoInterceptor());
}
}
@ConditionalOnClass(DispatcherServlet.class)
仅 MVC 框架有 Servlet Class 。
通过 Google AI 获得。
| 特性 | Spring MVC | Spring Gateway |
|---|---|---|
| 作用 | 构建Web 应用程序 | 构建API 网关 |
| 目标 | 用户请求的处理,返回数据和渲染页面 | 外部请求的过滤、路由、安全控制 |
| 核心概念 | Model, View, Controller | Route, Predicate, Filter |
| 应用场景 | 传统Web 应用程序 | API 接口的管理,微服务架构中的网关 |
Spring cloud Gateway 底层
是 Netty 框架。

更多细节,参考 netty 网站。
Netty is an NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.
'Quick and easy' doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.