内置过滤器
Gateway还提供的内置过滤器
不要和我们学习的filter混淆
内置过滤器允许我们在路由请求到目标资源的同时,对这个请求进行一些加工或处理
常见过滤器也有一些
我们给大家演示一下AddRequestParameter过滤器
它的作用是在请求中添加参数和它对应的值
routes:
- id: gateway-shanghai
uri: lb://shanghai
filters:
# 内置过滤器功能,AddRequestParameter在路由到指定控制器方法之前
# 在请求中添加参数age=18,控制器方法运行时可以通过age获取该值
- AddRequestParameter=age,18
predicates:
- Path=/sh/**
# 判断是否包含指定参数名称(username)的断言,不包含就不能正常路由
- Query=username
在shanghai的控制器方法中添加代码接收name,age的值
@RestController
@RequestMapping("/sh")
public class ShanghaiController {
@GetMapping("/show")
public String show(String username,Integer age){
System.out.println(ZonedDateTime.now());
return "这里是上海!username:"+username+",age:"+age;
}
}
重启shanghai和gateway进行测试
http://localhost:9000/sh/show?username=tom
因为过滤器的存在,控制器可以获取网关过滤器添加的参数值
其他内置过滤器和自定义过滤器的使用,同学们可以查阅相关文档自己了解
Gateway和SpringMvc依赖冲突问题和解决
之前网关的演示项目我们添加的网关依赖
<!-- Spring Gateway 网关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
当前csmall项目需要配置knife4j的路由配置,需要编写一个控制器
所以我们添加了SpringMvc的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这两个依赖在同一个项目中时,默认情况下启动会报错
SpringMvc框架中自带一个Tomcat服务器
而SpringGateway框架中自带一个Netty的服务器
在启动项目时,两个框架中包含的服务器都想占用相同端口,因为争夺端口号和主动权而发生冲突
导致启动服务时报错
要想能够正常启动必须在yml文件配置
spring:
main:
web-application-type: reactive
reactive:反应的
添加这个配置之后,会Tomcat服务器会变成非阻塞的运行