注:这里所介绍的解决跨域问题只是为了方便前后端联调接口,并不是真正意义上的解决业务上的跨域问题。
我所开发的项目是分布式项目,模块与前端调用时有时候会发生前端调用后端接口,报跨域禁止访问的问题,但在开发阶段,前后端的本地联调还是更为方便的,不用实时的部署代码,还能在IDEA监控报错信息,很方便。
只需两步就可以实现:
第一步:写一个全局配置类
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
/*允许服务端访问的客户端请求头*/
corsConfiguration.addAllowedHeader("*");
/*允许访问的客户端域名*/
corsConfiguration.addAllowedOrigin("*");
/*允许访问的方法名,GET POST等*/
corsConfiguration.addAllowedMethod("*");
/*是否允许请求带有验证信息*/
corsConfiguration.setAllowCredentials(false);
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
CorsFilter corsFilter = new CorsFilter(urlBasedCorsConfigurationSource);
return corsFilter;
}
}
直接粘进去导包就可以用。
第二步:关闭nacos的注册服务发现功能。
这里需要说明一下,如果只是想解决跨域问题,只需要上面的配置即可,但是前面说了,我这里是分布式的项目,一个模块有多人开发,每个人都启动注册一个项目在nacos上,前端访问的时候,nacos又是轮询的负载均衡模式,所以很容易调用到同事电脑上的服务,这样很影响开发,所以解决完跨域后,我在配置文件中设置关闭服务的注册与发现。
discovery:
# 服务注册地址
server-addr: 192.168.**.**:8849
namespace: 04028c67-****-4653-****-fdd80132****
group: mys-test
#关闭nacos服务注册与发现
register-enabled: false
总体来说,这个解决跨域的方式我个人觉得是比较好用的,当然还有在类上加上
@CrossOrigin这个注解,前端在配置一下禁止跨域与路径转发也可以。但是有时候这个方法不好使,所以如果常规方法不起作用,直接把第一步的配置类粘进去就可以解决了。