您现在的位置是:群英 > 开发技术 > web开发
gateway跨域问题解决方案是什么,怎样做
Admin发表于 2022-05-18 17:37:092437 次浏览
这篇文章给大家介绍了“gateway跨域问题解决方案是什么,怎样做”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“gateway跨域问题解决方案是什么,怎样做”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

一、gateway网关简介

api 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过api 网关这一层。也就是说,api 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 api 网关来做,这样既提高业务灵活性又不缺安全性。

spring cloud gateway是spring官方基于spring 5.0、spring boot2.0和project reactor等技术开发的网关,spring cloud gateway旨在为微服务架构提供简单、有效和统一的api路由管理方式,spring cloud gateway作为spring cloud生态系统中的网关,目标是替代netflix zuul,其不仅提供统一的路由方式,并且还基于filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

二、gateway使用步骤

步骤1:搭建模块并引入依赖

在项目中使用maven模块,搭建server-gateway模块。

由于gateway也需要在nacos中进行注册,所以在引入gateway依赖的同时,也要引入naocs依赖。

        <!--gateway-->
        <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-discovery</artifactid>
        </dependency>

步骤2:添加配置文件

下面的配置表示将网关服务端口设置为9000后,配置了两个路由id:

# 服务端口
server.port=9000
# 服务名
spring.application.name=service-gateway

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true

#设置路由id
spring.cloud.gateway.routes[0].id=service-hosp
#设置路由的uri
spring.cloud.gateway.routes[0].uri=lb://service-hosp
#设置路由断言,代理servicerid为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= path=/*/hosp/**

#设置路由id
spring.cloud.gateway.routes[1].id=service-cmn
#设置路由的uri
spring.cloud.gateway.routes[1].uri=lb://service-cmn
#设置路由断言,代理servicerid为auth-service的/auth/路径
spring.cloud.gateway.routes[1].predicates= path=/*/cmn/**

步骤3:创建启动类

@springbootapplication
public class servergatewayapplication {
    public static void main(string[] args) {
        springapplication.run(servergatewayapplication.class, args);
    }
}

网关初步测试

后端服务配置好后启动相应微服务,在前端dev.env.js文件中,也将端口设置为9000与后端对应:

'use strict'
const merge = require('webpack-merge')
const prodenv = require('./prod.env')
module.exports = merge(prodenv, {
  node_env: '"development"',
  base_api: '"http://localhost:9000"',
})

关闭之前配置的nginx,在不同端口之前发送请求,都可以成功访问:

三、gateway解决跨域问题

在service_gateway模块创建配置类,写入下面的内容:

@configuration
public class corsconfig {
    @bean
    public corswebfilter corsfilter() {
        corsconfiguration config = new corsconfiguration();
        config.addallowedmethod("*");
        config.addallowedorigin("*");
        config.addallowedheader("*");

        urlbasedcorsconfigurationsource source = new urlbasedcorsconfigurationsource(new pathpatternparser());
        source.registercorsconfiguration("/**", config);

        return new corswebfilter(source);
    }
}

配置好后,将之前项目中所有controller中的@crossorigin注解删除掉。

再次启动后端微服务和前端项目,切换不同选项卡,发现跨域问题被成功解决掉:



以上就是关于“gateway跨域问题解决方案是什么,怎样做”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-09-08 18:02:20 
摘要:前端es6是模块化开发;es6模块化规范就是浏览器端与服务器端通用的模块化开发规范,其中定义了每一个JavaScript文件都是一个独立的模块,导入其他模块成员使用import关键字,向外共享模块成员使用export关键字。
2022-05-06 18:09:24 
摘要:本篇文章给大家分享一个小程序实战,看看小程序中怎么进行图片优化,希望对大家有所帮助!
2022-11-02 18:18:37 
摘要:C语言中sizeof和strlen的区别是:strlen是一个函数,用来计算指定字符串str的长度,但不包括结束字符(即null字符);而sizeof是一个单目运算符,不是函数。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部