API 网关是外部资源对服务内部资源访问的入口,所以文件上传请求应该首先请求的是网关服务,然后由网关服务转发到具体的资源服务上。
1.创建工程:
2.配置bootstrap文件
server:
port: 9000 #服务端口
spring:
application:
name: gateway #服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yml
gateway:
discovery:
locator:
enabled: true #动态配置中心
routes:
- id: router01 #配置id,路由标识符,区别于其他 Route。
uri: lb://resource #路由指向的目的地 uri,即客户端请求最终被转发到的微服务。
predicates:
- Path=/sca/resource/upload/** #断言(谓词)的作用是进行条件判断,只有断言都返回真,才会执行路由。
filters:
- StripPrefix=1 #过滤器用于修改请求和响应信息。
3.启动类
package cn.y;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Yzt
* @version 1.0
* @date 2021/11/17 9:50
*/
@SpringBootApplication
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
4.网关跨域配置
package cn.y.config;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
/**
* @author Yzt
* @version 1.0
* @date 2021/11/17 9:54
*/
class CorsFilterConfig {
@Bean
public CorsWebFilter corsWebFilter(){
//1.构建基于url方式的跨域配置
UrlBasedCorsConfigurationSource source= new UrlBasedCorsConfigurationSource();
//2.进行跨域配置
CorsConfiguration config=new CorsConfiguration();
//2.1允许所有ip:port进行跨域
config.addAllowedOrigin("*");
//2.2允许所有请求头跨域
config.addAllowedHeader("*");
//2.3允许所有请求方式跨域:get,post,..
config.addAllowedMethod("*");
//2.4允许携带有效cookie进行跨域
config.setAllowCredentials(true);
source.registerCorsConfiguration("/**",config);
return new CorsWebFilter(source);
}
}
或者在配置文件中
spring:
cloud:
gateway:
globalcors: #跨域配置
corsConfigurations:
'[/**]':
allowedOrigins: "*"
allowedHeaders: "*"
allowedMethods: "*"
allowCredentials: true
此时网关跨域便配置好了。