SpringBoot使用addCorsMappings配置跨域不起作用

2022年6月4日07:01:29排错和经验评论178阅读模式

一开始配置

public void addCorsMappings(CorsRegistry registry) {
     registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("POST""GET""PUT""OPTIONS""DELETE")
            .allowCredentials(true)
            .allowedHeaders("*")
            .maxAge(3600);
}

问题

但是,当使用了上述配置后,再使用自定义拦截器时,跨域问题的相关配置就会失效,请求依然会报跨域问题的错。文章源自随机的未知-https://sjdwz.com/11198.html

原因是客户端请求经过的先后顺序问题,当服务端接收到一个请求时,该请求会先经过过滤器,然后进入拦截器中,然后再进入Mapping映射中的路径所指向的资源,所以跨域配置在mapping上并不起作用,返回的头信息中并没有配置的跨域信息,浏览器就会报跨域异常。文章源自随机的未知-https://sjdwz.com/11198.html

解决

将上述配置删掉,使用CorsFilter过滤器CorsFilte:文章源自随机的未知-https://sjdwz.com/11198.html

private CorsConfiguration corsConfig() {
     CorsConfiguration corsConfiguration = new CorsConfiguration();

     /*这里建议改成自己域名,一个一个添加;
      支持http://localhost:8080和
     https://www.baidu.com这种
     比如
     corsConfiguration.addAllowedOrigin("http://localhost:8080");
     corsConfiguration.addAllowedOrigin("https://www.baidu.com");
    */
     corsConfiguration.addAllowedOrigin("*");
     corsConfiguration.addAllowedHeader("*");
     corsConfiguration.addAllowedMethod("*");
     corsConfiguration.setAllowCredentials(true);
     corsConfiguration.setMaxAge(3600L);
     return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
     UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
     source.registerCorsConfiguration("/**", corsConfig());
     return new CorsFilter(source);
}

文章源自随机的未知-https://sjdwz.com/11198.html
欢迎关注本站微信公众号:随机的未知 如果喜欢本文,欢迎点赞,收藏,转发,打赏。
  • 本文由 发表于 2022年6月4日07:01:29
  • 转载请注明:来源:随机的未知 本文链接https://sjdwz.com/11198.html
排错和经验

transferto转换文件报错

问题 上传文件到服务器,直接把File对象当作transferto()方法的参数;但是使用postman请求报错。报错信息如下: java.io.FileNotFoundException: C:\U...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定