Administrator
发布于 2023-03-04 / 49 阅读
0
0

API网关服务:Gateway

快速入门

在前面的工程上,新建一个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世界将是一片混乱。也是由于浏览器的同源策略 ,保证来至不一样源的对象
不会互相干扰,保证了咱们访问页面最基本的安全。

image-1677913421839

相关文章:https://juejin.cn/post/7062998091813060616#heading-13

Springboot解决跨域问题

在springboot中可以采用多种方式解决跨域问题,例如:
添加跨域配置类

可以在类或方法上添加@CrossOrigin 注解。

还有一种就是全局配置,全局配置需要添加自定义类实现 WebMvcConfigurer 接口,然后实现接口中的
addCorsMappings 方法。

相关文章:http://t.csdn.cn/SjPYj

微服务网关跨域配置

修改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 # 这次跨域检测的有效期

跨域部分未实践,只是看到了做个记录


评论