Gateway
快速搭建
网关本质上也是一个服务。
引入依赖
搭建网关首先需要引入相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
较高版本的SpringCloud的Gateway还需要引入一个负载均衡的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
如果使用nacos来进行服务发现,还需要引入nacos服务发现的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
编写路由配置和nacos地址
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
routes:
- id: user-service #路由唯一标识
uri: lb://userservice #路由的目标地址
predicates:
- Path=/user/** #路径断言
断言工厂
过滤器
过滤器工厂
默认过滤器
当想给多个路由设置相同的过滤器时,可以使用默认过滤器
spring:
cloud:
gateway:
default-filters:
- AddRequestHeader=Cookie,name=zoffy
全局过滤器
当想实现的过滤器逻辑过于复杂的时候,过滤器工厂中的过滤器便不能满足要求,此时必须自定义过滤器,全局过滤器就可以帮助我们自定义过滤器。
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> queryParams = request.getQueryParams();
String name = queryParams.getFirst("name");
if("zoffy".equals(name)){
//放行逻辑
return chain.filter(exchange);
}
//拦截逻辑
return exchange.getResponse().setComplete();
}
}
执行顺序
通过order注解可以决定filter的执行顺序,当前过滤器和DefaultFilter默认order为声明顺序从1开始递增.
在order相同时,执行顺序:DefaultFilter>路由过滤器>GlobalFilter
@Order(2)
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return null;
}
}
CORS跨域
Gateway通过简单配置便可以解决跨域问题
spring:
cloud:
gateway:
globalcors: #全局的跨域处理
add-to-simple-url-handler-mapping: true #解决option请求被拦截问题
cors-configurations:
'[/**]':
allowedOrigins: #允许哪些网站的跨域请求
- "http://localhost:8090"
allowed-methods: #允许的跨域ajax的请求方式
- "POST"
- "GET"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true #是否允许携带cookie
maxAge: 360000 #此次跨域检测的有效期