跨域问题:
请求资源浏览器控制台显示如下错误:
原因:
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。
前后端分离开发中,需要考虑ajax跨域的问题。
这里我们可以从服务端解决这个问题:在相关的Controller类上添加注解
@CrossOrigin //跨域
方式二(配置网关跨域):
在gateway服务中创建配置文件CorsConfig,内容如下
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*"); //所有源服务器
config.addAllowedHeader("*"); //所有请求头
config.addAllowedMethod("*"); //所有方法:GET、POST、PUT、DElETE
config.setAllowCredentials(true);//cookie可跨域
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config); //所有路径
// cors过滤器
return new CorsWebFilter(source);
}
}
删除Controller的跨域配置
目前我们已经在网关做了跨域处理,那么service服务就不需要再做跨域处理了,将之前在controller类上添加过@CrossOrigin
标签去掉,并重启对应的微服务
此时重启服务,即可正常响应资源