springboot 实现跨域的几种方式

1、跨域的原因:

由于同源策略(Same Origin Policy)的限制,浏览器不允许跨域请求。同源策略规定,A网页设置的Cookie、LocalStorage和IndexDB无法被同源以外的网页读取。

2、原因:

1)浏览器的同源策略(Same Origin Policy)限制了跨域请求。主要出于安全考虑,浏览器限制脚本只能读取与之同源的资源。同源指的是协议、域名、端口都相同。跨域请求会因为违反同源策略而被阻止

2)Cookie和本地存储也遵循同源策略。A域名下的页面无法读取B域名下的Cookie、localStorage等

3)跨域JavaScript请求会报错。比如A页面请求B页面的JS文件,就会报错

3、常见跨域请求

1)JSONP:通过script标签加载JS文件来实现跨域通信

2)CORS:服务器端设置HTTP头,允许指定的请求来源跨域访问

3)postMessage:A域的window向B域的window发送消息,实现跨域通信

4、实现跨域的几种方式

1)@crossOrigin 注解

复制代码
    @CrossOrigin(origins = "http://domain1.com")
	@RestController
	public class TestController {
	    @GetMapping("/test")
	    public String test() {
	        return "hello";
	    }
	}

2)过滤器CorsFilter

@Configuration

复制代码
	public class CorsConfig {
	    @Bean
	    public CorsFilter corsFilter() {
	        CorsConfiguration config = new CorsConfiguration();
	        config.setAllowCredentials(true);
	        config.addAllowedOrigin("http://domain1.com");
	        config.addAllowedHeader("*");
	        config.addAllowedMethod("*");
	        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
	        source.registerCorsConfiguration("/**", config);
	        return new CorsFilter(source);
	    }
	}

3).配置类WebMvcConfigurer

描述:可以在WebMvcConfigurer接口的addCorsMappings()方法中添加跨域配置

复制代码
	    @Configuration
		public class CorsConfig implements WebMvcConfigurer {
		    @Override
		    public void addCorsMappings(CorsRegistry registry) {
		        registry.addMapping("/**")
		            .allowedOrigins("http://domain1.com")
		            .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
		            .allowedHeaders("*")
		            .allowCredentials(true);
		    }
		}
相关推荐
村口张大爷2 小时前
Spring Boot 初始化钩子
java·spring boot·后端
LB21122 小时前
苍穹外卖-缓存套餐 Spring Cache day07
java·spring boot·spring
Q_Q5110082855 小时前
python+uniapp基于微信小程序的学院设备报修系统
spring boot·python·微信小程序·django·flask·uni-app
小毛驴8505 小时前
在Spring Boot开发中,HEAD、OPTIONS和 TRACE这些HTTP方法各有其特定的应用场景和实现方式
spring boot·后端·http
Jabes.yang5 小时前
Java面试大作战:从缓存技术到音视频场景的探讨
java·spring boot·redis·缓存·kafka·spring security·oauth2
zl9798995 小时前
SpringBoot-依赖管理和自动配置
spring boot·后端·状态模式
paopaokaka_luck5 小时前
基于SpringBoot+Vue的数码交流管理系统(AI问答、协同过滤算法、websocket实时聊天、Echarts图形化分析)
vue.js·人工智能·spring boot·websocket·echarts
Seven976 小时前
Springboot 常见面试题汇总
java·spring boot
ღ᭄ꦿ࿐Never say never꧂7 小时前
微信小程序 Button 组件 open-type 完全指南:从用户信息获取到客服分享的实战应用
spring boot·微信小程序·小程序·uni-app·vue3
Query*7 小时前
Java 设计模式—— 责任链模式:从原理到 SpringBoot 最优实现
java·spring boot·责任链模式