当前位置:

SpringCloud学习笔记part1Spring Cloud Gateway网关的搭建、处理跨域问题

访客 2024-04-23 268 0

一、SpringCloudGateway介绍

API网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求。API网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API网关这一层。

SpringCloudGateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,SpringCloudGateway作为SpringCloud生态系统中的网关,其不仅提供统一的路由方式,并且还基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

二、搭建网关模块

第一步,修改配置pom.xml

<dependencies><dependency><groupId>com.atguigu.yygh</groupId><artifactId>common-util</artifactId><version>1.0</version></dependency><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></dependencies>

第二步,在resources下添加配置文件。

#服务端口server.port=80#服务名spring.application.name=service-gateway#nacos服务地址spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#使用服务发现路由spring.cloud.gateway.discovery.locator.enabled=true#设置路由idspring.cloud.gateway.routes[0].id=service-hosp#设置路由的urispring.cloud.gateway.routes[0].uri=lb://service-hosp#设置路由断言,代理servicerId为auth-service的/auth/路径spring.cloud.gateway.routes[0].predicates=Path=/*/hosp/**#设置路由idspring.cloud.gateway.routes[1].id=service-dict#设置路由的urispring.cloud.gateway.routes[1].uri=lb://service-dict#设置路由断言,代理servicerId为auth-service的/auth/路径spring.cloud.gateway.routes[1].predicates=Path=/*/dict/**#springboot2.x版本支持的springcloud版本并不是最新的版本,最新的版本允许定义多个Path并用“,”隔开,但此版本springcloud若要定义多个同uri的Path,必须再写一个,如下:#设置路由idspring.cloud.gateway.routes[2].id=service-hosp#设置路由的urispring.cloud.gateway.routes[2].uri=lb://service-hosp#设置路由断言,代理servicerId为auth-service的/auth/路径spring.cloud.gateway.routes[2].predicates=Path=/*/user/**

第三步,添加启动类。开启@EnableDiscoveryClient注解,向Nacos注册服务。

@SpringBootApplication@EnableDiscoveryClientpublicclassServerGatewayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ServerGatewayApplication.class,args);}}

三、跨域问题处理

跨域问题是浏览器对于ajax请求的一种安全限制。一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有效的阻止跨站攻击。

跨域原因说明示例
域名不同www.jd.com与www.taobao.com
域名相同,端口不同www.jd.com:8080与www.jd.com:8081
二级域名不同item.jd.com与miaosha.jd.com

但是这却给我们的开发带来了不便,而且在实际生产环境中,肯定会有很多台服务器之间交互,地址和端口都可能不同。因此我们需要解决跨域问题,编写一个全局配置类,实现如下:

@ConfigurationpublicclassCorsConfig{@BeanpublicCorsWebFiltercorsFilter(){CorsConfigurationconfig=newCorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSourcesource=newUrlBasedCorsConfigurationSource(newPathPatternParser());source.registerCorsConfiguration("/**",config);returnnewCorsWebFilter(source);}}

:目前我们已经在网关做了跨域处理,那么service服务就不需要再做跨域处理了,若controller类上添加过@CrossOrigin注解标签的,需要去掉,否则会造成程序异常。

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~