目录:
一、网关技术的实现
1. 在SpringCloud中,网关的实现包括两种:gateway和zuul。
2. Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
3. 作用:对用户请求做身份认证、权限校验;将用户请求路由到微服务,并实现负载均衡;对用户请求做限流。
二、搭建网关服务
1. 新建模块,并添加依赖
```xml
```
2. 新建Gateway包,并编写启动类
3. 编写yml文件
网关配置
## 1、网关路由配置
在 `application.yml` 文件中,我们可以设置如下路由规则:
```yaml
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
gateway:
routes:
- id: user-service #路由标识(唯一)
uri: lb://userservice #目标路由的地址
predicates: #路由断言
- Path=/user/** #判断路径
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
```
## 2、启动服务,并在网页内测试
按照上述配置,我们可以直接通过浏览器访问 `http://localhost:10010/user` 和 `http://localhost:10010/order` 来测试路由是否生效。如果能够正常访问,说明我们的路由已经配置成功。
## 3、步骤总结
### 三、路由断言工厂
1. 网关路由可以配置的内容包括:
- `id`:路由唯一标示
- `uri`:`lb://xxx` 或者 `http://xxx`,表示路由目的地。其中,`lb://xxx` 表示使用负载均衡策略进行请求转发。
- `predicates`:`Path=/xxx` 或者 `host=xxx`,表示路由断言。只有当请求满足这些条件时,才会转发到对应的路由地址。例如,`Path=/user/**` 就表示所有以 `/user` 开头的请求都会被转发到 `userService`。
- 当路由规则不符合时,会出现404的错误。
Order(-1) // 参数是指过滤器的优先级,值越低,优先级越高
@Component
public class AuthorizeFileter implements GlobalFilter {
@Override
public Mono
// 1.获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap
// 2.获取参数中的authorization参数
String authorization = params.getFirst("authorization");
// 3.判断参数值是否等于admin
if ("admin".equals(authorization)) {
// 4.是则放行
return chain.filter(exchange);
} else {
// 5.否则拦截
// 5.1设置状态码
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
// 5.2拦截请求
return exchange.getResponse().setComplete();
}
}
}
这段代码是一个Java配置文件,用于全局跨域处理。其中,globalcors用于全局的跨域处理,add-to-simple-url-handler-mapping用于解决options请求被拦截问题,corsConfigurations用于设置跨域配置,allowedOrigins用于设置允许哪些网站的跨域请求,allowedMethods用于设置允许的跨域ajax的请求方式,allowedHeaders用于设置允许在请求中携带的头信息,allowCredentials用于是否允许携带cookie,maxAge用于设置这次跨域检测的有效期 。