springboot跨域过滤器fetch react Response to preflight request doesn‘t pass access control check问题

 更新时间:2024年03月13日 10:42:55   作者:帅气kkkk  
这篇文章主要介绍了springboot跨域过滤器fetch react Response to preflight request doesn‘t pass access control check问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

浏览器出于安全考虑,限制了JS发起跨站请求,使用XHR对象发起请求必须遵循同源策略(SOP:Same Origin Policy),跨站请求会被浏览器阻止,这对开发者来说是很痛苦的一件事,尤其是要开发前后端分离的应用时。

在现代化的Web开发中,不同网络环境下的资源数据共享越来越普遍,同源策略可以说是在一定程度上限制了Web API的发展。

简单的说,CORS就是为了请求能够安全跨域而生的。至于CORS的安全性研究,本文不做探讨。

CORS浅述

名词解释

跨域资源共享(Cross-Origin Resource Sharing)

概念

是一种跨域机制、规范、标准,怎么叫都一样,但是这套标准是针对服务端的,而浏览器端只要支持HTML5即可。

作用

可以让服务端决定哪些请求源可以进来拿数据,所以服务端起主导作用(所以出了事找后台程序猿,无关前端^ ^)

常用场景

前后端完全分离的应用

服务端未允许跨域

服务端未允许跨域

如何解决

package pers.yiji.YiJiClientServer.util;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {

    /**
     * cors support
     * @return
     */
    @Bean
    public FilterRegistrationBean corsFilter() {
        // 注册CORS过滤器
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 是否支持安全证书
        config.addAllowedOrigin("*"); // 允许任何域名使用
        config.addAllowedHeader("*"); // 允许任何头
        config.addAllowedMethod("*"); // 允许任何方法(post、get等)
        // 预检请求的有效期,单位为秒。
        //        config.setMaxAge(3600L);

        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

具体每句话的意思基本上注释都有写。

主要就是为了注册一个过滤器,这里是基本上允许所有的请求,在特殊的场景可以使用域名控制等。

config.addAllowedOrigin("*"); // 允许任何域名使用(*可以换成特定的域名)

结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Java实现加盐算法的两种方法

    Java实现加盐算法的两种方法

    数据安全是一个重要的问题,本文主要介绍了Java实现加盐算法的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • JAVA图片水印开发案例详解

    JAVA图片水印开发案例详解

    水印开发是web开发中一种比较常见的功能,实现的代码很简单,这篇文章主要介绍了JAVA图片水印开发案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Java WebSocket客户端接收大量数据的三种方案

    Java WebSocket客户端接收大量数据的三种方案

    WebSocket是一种基于TCP协议的全双工通信协议,它能够在客户端和服务器之间建立一个持久连接,实现实时的双向数据传输,在实际应用中,有时候我们需要处理大量的数据,所以本文将介绍如何使用 Java WebSocket 客户端接收大量数据,并提供一些优化方案
    2023-11-11
  • Java关于IO流的全面介绍

    Java关于IO流的全面介绍

    下面小编就为大家带来一篇Java关于IO流的全面介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • java常用工具类 IP、File文件工具类

    java常用工具类 IP、File文件工具类

    这篇文章主要为大家详细介绍了java常用工具类,包括IP、File文件工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Java Stream API详解与使用示例详解

    Java Stream API详解与使用示例详解

    Java Stream API 是一个功能强大的工具,适用于处理集合和数据流,本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 在Java8中如何避开空指针异常

    在Java8中如何避开空指针异常

    这篇文章主要给大家介绍了关于在Java8中如何风骚走位的避开空指针异常的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    本文主要使用的算法(自动生成地图:递归分割法、递归回溯法;寻找路径:深度优先、广度优先算法),非常具有实用价值,需要的朋友可以参考下
    2021-06-06
  • SpringBoot学习系列之MyBatis Plus整合封装的实例详解

    SpringBoot学习系列之MyBatis Plus整合封装的实例详解

    MyBatis-Plus是一款MyBatis的增强工具(简称MP),为简化开发、提高效率,这篇文章给大家介绍MyBatis Plus整合封装的实例详解,感兴趣的朋友跟随小编一起看看吧
    2020-08-08
  • Spring的BeanUtils.copyProperties属性复制避坑指南

    Spring的BeanUtils.copyProperties属性复制避坑指南

    这篇文章主要介绍了Spring的BeanUtils.copyProperties属性复制避坑指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论