目录:

一、网关技术的实现

1. 在SpringCloud中,网关的实现包括两种:gateway和zuul。

2. Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

3. 作用:对用户请求做身份认证、权限校验;将用户请求路由到微服务,并实现负载均衡;对用户请求做限流。

二、搭建网关服务

1. 新建模块,并添加依赖

```xml

org.springframework.cloud

spring-cloud-starter-gateway

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

```

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`。

- `filters`:`AddRequestHeader=Truth`,表示对请求头添加一个名为 `Truth` 的参数,值为 `Itcast is freaking aowsome!`,用于处理请求或响应。

- 当路由规则不符合时,会出现404的错误。

Order(-1) // 参数是指过滤器的优先级,值越低,优先级越高

@Component

public class AuthorizeFileter implements GlobalFilter {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

// 1.获取请求参数

ServerHttpRequest request = exchange.getRequest();

MultiValueMap params = request.getQueryParams();

// 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用于设置这次跨域检测的有效期 。