Springboot处理配置CORS跨域请求时碰到的坑

作者:没头脑遇到不高兴 时间:2023-12-20 11:40:45 

最近开发过程中遇到了一个问题,之前没有太注意,这里记录一下。我用的SpringBoot版本是2.0.5,在跟前端联调的时候,有个请求因为用户权限不够就被 * 拦截了, * 拦截之后打印日志然后response了一个错误返回了,但是前端Vue.js一直报如下跨域的错误,但是我是配置了跨域的。

has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的 * 中代码如下:


private void writeResponse(HttpServletResponse response,
ResponseResult<?> respResult, JSONObject reqParams) {
PrintWriter writer = null;
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
writer = response.getWriter();
writer.write(JSON.toJSONString(respResult));
writer.flush();
} catch (Exception e) {
log.error(" * 响应异常,respJson:"+reqParams, e);
} finally{
if(writer != null){
writer.close();
}
}
}

我的 * 是通过实现WebMvcConfigurer接口,然后重新其addCorsMappings(CorsRegistry registry)方法添加跨域设置的,具体如下所示:


@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

@Bean
   public UserCenterInterceptor userTokenInterceptor() {
       return new UserCenterInterceptor();
   }

@Override
   public void addCorsMappings(CorsRegistry registry) {
   registry.addMapping("/**")
       .allowedMethods("GET","POST","OPTIONS")
       .allowedOrigins("你要设置的域名")
       .allowedHeaders("*")
       .allowCredentials(true);
   WebMvcConfigurer.super.addCorsMappings(registry);
   }
}

原因是请求经过的先后顺序问题,请求会先进入到自定义 * 中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息,浏览器就会报跨域异常。

正确的设置跨域的方式是通过CorsFilter过滤器,具体代码如下:


@Configuration
public class CorsConfig {

private CorsConfiguration buildConfig() {
       CorsConfiguration corsConfiguration = new CorsConfiguration();
       corsConfiguration.addAllowedOrigin("*");
       corsConfiguration.addAllowedHeader("*");
       corsConfiguration.addAllowedMethod("*");
       corsConfiguration.setAllowCredentials(true);
       return corsConfiguration;
   }

@Bean
   public CorsFilter corsFilter() {
       UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
       source.registerCorsConfiguration("/**", buildConfig());
       return new CorsFilter(source);
   }
}

完美解决了坑,很开森,哈哈哈!!!继续行走在踩坑的路上。。。。。。

Springboot处理配置CORS跨域请求时碰到的坑

来源:https://blog.csdn.net/u012988901/article/details/97395556

标签:Springboot,CORS跨域请求,Java
0
投稿

猜你喜欢

  • C#微信开发之启用开发者模式

    2022-07-07 11:24:54
  • 使用Spring开启注解AOP的支持放置的位置

    2022-08-16 19:16:33
  • WPF如何自定义ProgressBar滚动条样式

    2021-08-02 13:31:44
  • base64_encode和base64_decode的JAVA实现

    2023-08-25 07:56:49
  • c#爬虫爬取京东的商品信息

    2022-12-03 14:38:11
  • Java缓存ehcache的使用步骤

    2022-06-25 04:30:55
  • C#中结构体定义并转换字节数组详解

    2023-01-23 11:07:50
  • C#客户端程序调用外部程序的3种实现方法

    2023-06-02 11:39:10
  • Java集合定义与用法实例总结【Set、List与Map】

    2023-11-21 08:26:40
  • Idea 快速生成方法返回值的操作

    2023-07-31 02:12:49
  • C#实现文件上传及文件下载功能实例代码

    2022-12-13 23:57:23
  • Spring中统一异常处理示例详解

    2022-08-01 07:09:24
  • Android实现在一个activity中添加多个listview的方法

    2023-10-13 14:41:22
  • SpringCloud实现灰度发布的方法步骤

    2023-03-17 05:18:37
  • Android控件之GridView用法实例分析

    2022-03-02 00:01:34
  • C#中倒序输出字符串的方法示例

    2023-10-27 21:45:13
  • java基于AES对称加密算法实现的加密与解密功能示例

    2023-02-07 13:34:47
  • Java关于MyBatis缓存详解

    2021-11-01 00:40:20
  • Android中实现多行、水平滚动的分页的Gridview实例源码

    2022-01-14 08:23:58
  • Java开发中synchronized的定义及用法详解

    2021-11-11 07:01:20
  • asp之家 软件编程 m.aspxhome.com