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链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。
在项目中使用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>
下面的配置表示将网关服务端口设置为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/**
@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,在不同端口之前发送请求,都可以成功访问:
在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
注解删除掉。
再次启动后端微服务和前端项目,切换不同选项卡,发现跨域问题被成功解决掉:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。