给微服务项目引入GateWay处理跨域和统一路由

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 给微服务项目引入GateWay处理跨域和统一路由

GateWay配置


GateWay回顾


核心的逻辑:路由转发 + 执行过滤器链。

image.png


跨域问题


跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域

如何解决跨域问题?

由之前的介绍我们已经知道错误的原因,既然跨域会产生问题,那么我们就不跨域不就完了嘛!!!

1.注解@CrossOrigin,在后端接口加上@CrossOrigin即可解决跨域问题

2.使用网关解决,配置跨域配置类进行设置


前端配置统一的请求地址


window.SITE_CONFIG['baseUrl'] = 'http://localhost:88/api';

后端的网关地址是多少就填多少,这样所有的请求都会发到http://网关地址:88/api这个uri

image.png


将微服务接入nacos


这里通过引入mall-common模块让其他模块启程它的依赖

这里renren-fast版本要改成和你Springboot版本一样,如下:

  1. springboot版本和sprincloud有版本对应,mall-common模块引入的cloud版本都是对应好的
  2. 包的冲突

因为renren-fast本来用的是2.6.6,它和低版本还有个点不同就是配置跨域的配置文件时2.6.6用的是.allowedOriginPatterns

而2.4版本以下的用的是.allowedOrigins,所以进行替换即可将 .allowedOriginPatterns替换为.allowedOrigins

如果还有冲突,就用maven helper排查即可

https://blog.csdn.net/kingwinstar/article/details/106916140?spm=1001.2014.3001.5506

image.png

那么将微服务引入nacos注册中心只要三步

  1. 引入依赖(mall-common)
  2. 添加注解(启动类添加@EnableDiscoveryClient)
  3. 配置文件(指定nacos注册中心地址和微服务名称)

renren-fast的dev配置文件加上如下内容

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  application:
    name: renren-fast

网关的properties文件加上如下内容

# 应用名称
spring.application.name=mall-gateway
server.port=88
#服务发现
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

注册成功如下

image.png


设置路由


Spring Cloud Gateway 路径重写正则表达式的理解:blog.csdn.net/weixin_4319…

这里我在gateway中配置了将nacos作为配置中心

所以通过写bootstrap.properties文件来指定地址和命名空间即可

spring.application.name=mall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f1212912-c9f6-4323-b9f5-1a7d8d92c5b4

配置文件如下

spring:
    gateway:
      routes:
        - id: product_route
          uri: lb://mall-product
          predicates:
            - Path=/api/product/**
          filters:
          # 将 https://网关ip/api/product/** 这个路径重写为 https://mall-product微服务地址:端口/**
            - RewritePath=/api/(?<segment>.*),/${segment}
        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
          # 将 https://网关ip/api/** 这个路径重写为 https://renren-fast微服务地址:端口/renren-fast**
            - RewritePath=/api/(?<segment>.*),/renren-fast/${segment}


配置跨域


@Configuration
public class CrosConfig {
    @Bean
    public CorsWebFilter corsWebFilter() {
        //此处使用响应式包
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");//允许哪些请求来源
        corsConfiguration.setAllowCredentials(true);//是否允许携带cookie
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(source);
    }
}

renren-fast模块删除自带的跨域配置

image.png


测试


这里配置的还有逻辑删除,在实体类上加

@TableLogic(value = "1",delval = "0")
private Integer showStatus;
//配置文件补充
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

image.png



相关文章
|
9天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
108 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
4月前
|
消息中间件 监控 开发工具
微服务(三)-实现自动刷新配置(不重启项目情况下)
微服务(三)-实现自动刷新配置(不重启项目情况下)
|
2月前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
52 0
|
3月前
|
缓存 监控 API
微服务架构下RESTful风格api实践中,我为何抛弃了路由参数 - 用简单设计来提速
本文探讨了 RESTful API 设计中的两种路径方案:动态路径和固定路径。动态路径通过路径参数实现资源的 CRUD 操作,而固定路径则通过查询参数和不同的 HTTP 方法实现相同功能。固定路径设计提高了安全性、路由匹配速度和 API 的可维护性,但也可能增加 URL 长度并降低表达灵活性。通过对比测试,固定路径在性能上表现更优,适合微服务架构下的 API 设计。
|
4月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
184 5
|
4月前
|
负载均衡 安全 Java
微服务 Gateway 使用详解
网关(Gateway)是连接不同网络并进行数据转发的关键组件。在互联网中,路由器常作为默认网关;在现代操作系统中,网关指本地网络上转发数据包的设备。Spring Cloud Gateway是一款基于Spring Framework的API网关,具备反向代理、高性能、负载均衡、安全控制、限流熔断、日志监控等功能。通过简单配置即可实现请求路由和转发,适用于微服务架构中的集中控制、解耦客户端与服务、自动服务发现等场景,提升系统安全性与可扩展性。
259 4
|
5月前
|
JSON Nacos 开发工具
微服务通过nacos实现动态路由
微服务通过nacos实现动态路由
104 7
|
6月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
621 15
|
6月前
|
负载均衡 Java 开发者
如何在Spring Boot项目中实现微服务架构?
如何在Spring Boot项目中实现微服务架构?
|
6月前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目