跨域Cros Access-Control-Allow-Origin Access to XMLHttpRequest at from origin has been blocked by Cros

跨域问题

背景

做前后端分离的项目,就会涉及到跨域问题,处理的方案有很多。如果项目小,controller少(只有一两个,基本不存在,一般能用MVC的都是比较大的项目),直接在Controller上面添加注解@CrossOrigin(origins={""}),将前端的路径填入即可,还有一种常用的解决方案就是配置全局跨域类ConfigurerAdapter(见DruidMall config目录下),在配置类里面定义一个返回 CorsFilter类型的Bean,在Bean上面加上@ConfigurationProperties(prefix = “login”, ignoreUnknownFields = true) 这个注解,就可以读取application.yml文件中 login开头的配置文件(配置文件中可以配置origin等信息,这样以后修改origin就不需要重新编译启动项目)

跨域
为什么会出现跨域的问题

出于浏览器的同源策略限制问题(出于安全考虑),同源限制策略是一种约定,如果缺少了同源策略,浏览器的功能会受到影响。同源策略会阻止一个域的JavaScript脚本与另一个域的资源进行交互。

同源

协议 http/https

源 aa.com

端口 8080

但凡上面有一个与当前的url不一致,就是跨域

非同源限制

1.无法读取网页的cookies

2.无法解除非同源的dom树

3.无法向非同源发送ajax请求

跨域解决方案1
配置在Controller 上面的跨域注解,一般只需要将前端项目的路径写在这个地方就可以了
@CrossOrigin(origins = {"http://localhost:4300","http://localhost:4320","http://localhost:3000")
跨域解决方案2
配置跨域类(我这里是允许所有的origin的所有的方法都可以访问,目前还在develop阶段)
@Configuration
@EnableWebMvc
public class ConfigurerAdapter implements WebMvcConfigurer {
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
当然上面都是在后端进行处理的

跨域处理参考 https://blog.csdn.net/qq_38128179/article/details/84956552

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值