快速入门
在前面的工程上,新建一个module,继承父工程。
1、导包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、写配置
server:
port: 8888 # 网关端口
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://jq1:8083/eureka/
spring:
application:
name: gateway # 服务名称
cloud:
gateway:
routes: # 网关路由配置
- id: eureka-client # 路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
uri: lb://eureka-client # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/eureka-client/** # 这个是按照路径匹配,只要以/user/开头就符合要求
3、测试
通过api网关的端口号,根据路径匹配,即可请求到相应的服务。
http://localhost:8888/eureka-client
有个疑问:
如果不经由网关,而是直接访问部署应用的端口号和路径也是可以访问到的,但实际部署的时候不会这么做,
而是会对部署的应用设置防火墙等安全措施,使得只经由提供的端口访问
网关的作用
先记录一个过滤(有过滤工厂;全局过滤器等可以给我们实现)
跨域问题
为什么浏览器不支持跨域
假设如今有a.com和b.com两个域,若是没有这一安全策略,那么当用户在访问a.com时,
a.com的一段脚本就能够在不加载b.com的页面而随意修改或者获取b.com上面的内容。这
样将会致使b.com页面的页面发生混乱,甚至信息被获取,包括服务器端发来的session。这
样的话,web世界将是一片混乱。也是由于浏览器的同源策略 ,保证来至不一样源的对象
不会互相干扰,保证了咱们访问页面最基本的安全。
Springboot解决跨域问题
在springboot中可以采用多种方式解决跨域问题,例如:
添加跨域配置类
可以在类或方法上添加@CrossOrigin 注解。
还有一种就是全局配置,全局配置需要添加自定义类实现 WebMvcConfigurer 接口,然后实现接口中的
addCorsMappings 方法。
微服务网关跨域配置
修改application.yml ,在spring.cloud.gateway节点添加配置
spring:
cloud:
gateway:
# 。。。
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:8090"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
跨域部分未实践,只是看到了做个记录