Gulimall学习:通过SpringBoot解决跨域CORS问题

news/2024/7/24 7:33:17

1. 什么是跨域问题

指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。举例如下:
(1)http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)
(2)http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
(3)http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
(4)http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)
(5)http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

2. 调接口出现如下问题(CORS)

Access to XMLHttpRequest at 'http://localhost:88/api/sys/login' from origin 'http://localhost:8001' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

3. 解决:加入如下配置代码

package com.atguigu.gulimall.gateway.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.server.ServerWebExchange;

/**
 * 处理跨域问题
 * 允许了所有的外部形式的调用
 *
 * @author QuS
 * @date 2020/9/18 15:07
 */
@Configuration
public class GulimallCorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter() {

        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //配置跨域
        /*允许服务端访问的客户端请求头*/
        corsConfiguration.addAllowedHeader("*");
        /*允许访问的方法名,GET POST等*/
        corsConfiguration.addAllowedMethod("*");
        /*允许访问的客户端域名*/
        corsConfiguration.addAllowedOrigin("*");
        /*是否允许请求带有验证信息*/
        corsConfiguration.setAllowCredentials(true);
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(urlBasedCorsConfigurationSource);
        
    }
}

4. 注意

只能配置一个跨域,如果配置了多个跨域,会报如下错误,此时需要删除一个

Access to XMLHttpRequest at 'http://localhost:88/api/sys/login' from origin 'http://localhost:8001' has been blocked by CORS policy: 
The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:8001, http://localhost:8001', but only one is allowed.

http://www.niftyadmin.cn/n/1179249.html

相关文章

css制作三角形,下拉框三角形

网站制作中常常需要下拉框,而如果下拉框如果只是单纯的矩形则会显得太过单调,所以这次教大家利用css制作三角形放在矩形上面 首先利用css制作三角形 div {width:0px;height:0px;border-top:20px solid transparent;border-left:20px solid transparent;b…

QT-利用C++仿制windown自带的记事本程序V1.0

下班无事, 发现QT还是很好用的, 就仿制windows的记事本做了一个,未彻底DEBUG, 先拿来分享下. windows记事本大概是这样的: 大概分为以下几步: 1. 界面用QT代码写,即可, QT的布局很强大 1 //create all actions2 void Notepad::createActions()3 {4 newAct new QAction(tr(…

Gulimall学习:v-model、JSR303数据校验BindingResult、统一异常处理

一. v-model的trim、number、lazy v-model.trim 可以自动过滤输入首尾的空格v-model.number 只允许输入数值型。将输入转换成Number类型v-model.lazy 并不是实时改变,而是在失去焦点或者按回车时才会更新 二. JSR303数据校验 SpringMVC映射的实体类可以通过添加注…

WIN7下设置无线热点

WIN7下很方便,自带的。进入"控制面板-网络-网络和共享连接",选择左边栏的“更改适配器设置”,会看到网络连接多了一项“Microsoft Virtual WiFi Miniport Adapter”(如图1),可以使用命令行方式对…

详谈Android apk打包:关于APK数字签名详解介绍

2019独角兽企业重金招聘Python工程师标准>>> 本文主要为大家详细讲解APK数字签名方面的内容,并介绍APK调试模式和发布模式下数字签名的方式。 本文转自:http://www.jizhuomi.com/android/environment/293.html 1、什么是数字签名 数字签名…

selenium2+webdriver+java项目依赖的jar包

1、selenium-java-2.45.0.jar 2、selenium-java-2.45.0-srcs.jar 3、selenium-server-standalone-2.45.0.jar 说明: Selenium Server是指使用jdk来运行这个selenium-server-standalone-2.22.0.jar这个jar文件(java -jar /selenium-server-standalone-2.2…

sequence序列的创建、修改

一. 创建序列 create [序列名] increment by 1 minvalue 1 no maxvalue start with 1; 示例 create sequence syn_redis_fail_seq increment by 1 minvalue 1 no maxvalue start with 1;二. 清空表之后,想要重置序列从1开始计数 alter sequence [序列名] resta…

linux vi 提示:E558: 在 terminfo 中找不到终端项'vt100' 未知。

vi 提示: E558: 在 terminfo 中找不到终端项 vt100 未知。可用的内建终端有: builtin_riscos builtin_amiga builtin_beos-ansi builtin_ansi builtin_pcansi builtin_win32 builtin_vt320 builtin_vt52 builtin_xterm builtin_iris-ansi builtin_debug builtin_dum…