05 SpringBoot之跨域

1 跨域

刚开始不做任何配置时 , 通过VUE调用SB的接口 , 就会报错:"...has been blocked by CORS policy"

什么意思?

后端实际上已经接收到请求 , 也完成了处理 , 返回了处理后的数据 , 但被浏览器拦截了.

浏览器为什么拦截?

浏览器的同源策略 : 限制不同源之间的交互 , 以避免不同源的攻击 . 必须符合同源策略的请求 , 才能相互访问

什么是同源策略?

协议+域名+端口 , 三个都相同时才为同源.

现在知道为什么访问不了了:

由于前后端分离 , 故两端的访问端口不一样 . VUE项目默认启动在8181端口 , 而SB默认启动在8080端口 , 不符合同源策略.

CORS跨域资源共享 , 实质由许多HTTP头组成

解决办法:

  1. 在handler上增加@CrossOrigin
    但若handler太多 , 第一种方法就稍显冗余了.
  2. 统一增加一个过滤器
java 复制代码
package com.sunsplanter.utils;

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 {
    @Bean
    //返回一个corsFilter过滤器
    //创建过滤器需要一个参数:对象source ,
    // source需要注册一个corsConfiguration
    //corsConfiguration需要声明规则
    public CorsFilter corsFilter(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //*为通配符 , 表示允许所有请求域通过
        corsConfiguration.addAllowedOrigin("*");
        //*为通配符 , 表示允许所有请求头通过
        corsConfiguration.addAllowedHeader("*");
        //*为通配符 , 表示允许所有请求方法通过
        corsConfiguration.addAllowedMethod("*");
        
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);

        return new CorsFilter(source);
    }
}

IoC自动装配 , 无需再次调用 ,该全局规则会自动生效 .

相关推荐
不能放弃治疗1 小时前
单 Agent 实现模式
后端
IT_陈寒3 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
小bo波4 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
fliter4 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
用户3521802454755 小时前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
fliter5 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪5 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter5 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶6 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿6 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端