为什么会有跨域问题
因为浏览器的同源政策,就会产生跨域。比如说发送的异步请求是不同的两个源,就比如是不同的的两个端口或者不同的两个协议或者不同的域名。由于浏览器为了安全考虑,就会产生一个同源政策,不是同一个地方出来的是不允许进行交互的。
常见的跨域解决方式
-
在控制层加入允许跨域的注解
@CrossOrigin
-
使用
httpclient
,不依赖浏览器 -
使用网关
Gateway
注解:@CrossOrigin
在控制层加入允许跨域的注解,即可完成一个项目中前后端口跨域的问题
网关整合
Spring Cloud Gateway
作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul
,其 不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监 控/埋点、限流等。
(1)路由
路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组 Filter组成。如果断言路由为真,则说明请求的URL和配置匹配
(2)断言
Java8中的断言函数。Spring Cloud Gateway
中的断言函数输入类型是Spring5.0框 架中的ServerWebExchange
。Spring Cloud Gateway
中的断言函数允许开发者去定义匹配来自 于http request
中的任何信息,比如请求头和参数等。
(3)过滤器
一个标准的Spring webFilter
。Spring cloud gateway
中的filter分为两种类型的 Filter,分别是Gateway Filter
和Global Filter
。过滤器Filter将会对请求和响应进行修改处理
Spring cloud Gateway
发出请求。然后再由Gateway Handler Mapping
中找到与请 求相匹配的路由,将其发送到Gateway web handler
。Handler再通过指定的过滤器链将请求发 送到实际的服务执行业务逻辑,然后返回。
项目中使用
新建模块service_gateway
<dependencies>
<!-- 公共模块依赖 -->
<dependency>
<groupId>com.lzq</groupId>
<artifactId>service_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-disco