网关作用和功能:

1. 身份认证和权限校验

2. 服务路由、负载均衡

3. 请求限流

技术实现:

1. 阻塞式编程:SpringCloudGateway

2. Spring5响应式编程的实现:SpringCloudGateway

快速入门:

1. 搭建网关服务的步骤:

- 使用SpringCloudGateway和Nacos搭建网关服务

- 编写启动类

2. 编写路由配置及nacos地址:

- 在配置文件中添加路由配置及nacos地址

3. 测试:通过网关访问用户模块的接口:

- 通过网关访问用户模块的接口,查看控制台输出结果

路由断言工厂:

1. predicates:PredicateFactoryorg.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory

2. Predicate:用于匹配请求路径的断言工厂

路由的过滤器配置(GatewayFilterFactory):

1. 过滤器作用:添加请求头,只对当前路由的请求生效

2. 38种不同的路由过滤器工厂:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

3. 添加一个请求头:修改user service中的接口,使用网关访问对应接口,查看控制台输出结果

4. 默认过滤器:所有的路由都生效,值为default

5. 全局过滤器GlobalFilter:GatewayFilterGatewayFilterGlobalFilterGlobalFilter

6. 案例:定义全局过滤器,拦截并判断用户身份。需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin。如果同时满足则放行,否则拦截。重启网关,测试接口。

7. 过滤器链执行顺序:order值越小,优先级越高,执行顺序越靠前。使用@Order注解来指定order值。路由过滤器defaultFilter默认是按照声明顺序从1递增。defaultFilter >路由过滤器>GlobalFilter。

8. 网关的cors跨域配置:域名不同、域名相同、端口不同。禁止请求的发起者与服务端发生跨域ajax请求CORS。

网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:

首先,我们来看一下具体的操作步骤:

前端代码进行跨域请求

在前端代码中,我们需要使用Ajax或者Fetch等方法进行跨域请求。这通常需要在发起请求的头部添加一些特殊的字段,比如"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"等,以表明我们希望进行跨域请求。

例如,以下是一个使用JavaScript进行跨域请求的例子: markdown Copy code ``` javascript fetch('https://api.example.com/data', {

method: 'GET',

headers: {

'Content-Type': 'application/json',

'Origin': 'http://localhost:8080',

'Access-Control-Request-Method': 'GET',

'Access-Control-Allow-Origin': '*'

},

}).then(response => response.json()) .then(data => console.log(data)); ``` 这里的关键是在请求头部设置了"Access-Control-Allow-Origin": "*",表示允许任何源进行跨域请求。但在生产环境中,建议明确指定允许的源,以提高安全性。

配置yml文件跨域请求

在Spring Boot中,我们可以通过修改application.yml文件来配置跨域请求。例如: markdown Copy code ``` yml server: port: 8080 cross-origin: allowed-origins: '*' #允许所有源访问allowed-methods: ['PUT', 'POST'] #允许的HTTP方法allowed-headers: ['*'] #允许的HTTP头``` 这里的关键是在server.cross-origin部分配置allowed-origins为"*",表示允许所有源进行跨域请求。但在生产环境中,建议明确指定允许的源,以提高安全性。

访问对应接口,拿到数据

完成以上配置后,我们就可以直接通过浏览器或者Postman等工具访问我们的接口了。当我们发送请求时,网关节点会检查我们的请求是否满足CORS的要求,如果满足的话,就会返回我们请求的数据。