Spring boot 总结之跨域处理cors的方法

网友投稿 375 2023-02-18


Spring boot 总结之跨域处理cors的方法

背景

现在做的很多项目都是前后端分离的,这就引出一个很常见的问题,我们的页面和接口是在不同域名下的,当我们通过ajax访问后端接口的时候就会出现跨域问题,这种问题我们怎么解决呢?一般来说就是cors和jsonp这两种方案。Spring简化了cors的配置,接下来我们来看一下它提供的cors。

跨域问题描述

Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等。

CORS 与 JSONP 相比:

1、 JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTTP 请求。

2、 使用 CORS,开发者可以使用普通的 XMLHttpRequest 发起请求和获得数据,比起 JSONP 有更好的 错误处理。

3、 JSONP 主要被老的浏览器支持,它们往往不支持 CORS,而绝大多数现代浏览器都已经支持了 CORS。

WebMvcConfigurer对象

我们可以初始化一个WebMvcConfigurer对象来配置我们的cors映射。

@Configuration

public class CorsCongiguration {

@Bean

public WebMvcConfigurer corsConfigurer() {

return new WebMvcConfigurerAdapter() {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/api/**"); // 允许所有第三方域名访问该接口

// .allowedOrigins("http://domain2.com")//指定来源域名

// .allowedMethods("PUT", "DELETE")

// .allowedHeaders("header1", "header2", "header3")

// .exposedHeaders("header1", "header2")

// .allowCredentials(false).maxAge(3600);

}

};

}

}

继承WebMvcConfigurerAdapter

这种方式跟上面的方式很类似

@Configuration

@EnableWebMvc

public class CorsConfiguration_2 extends WebMvcConfigurerAdapter {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMappiedwjHptmAung("/api/**");

}

}

corsFilter

这种方式现在很少用

@Component

@EnableWebMvc

public class CorsFilterCongiguration extends CorsFilter {

public CorsFilterCongiguration(CorsConfigurationSource configSource) {

super(configSource);

}

@Bean

public FilterRegistrationBean corsFilter() {

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

CorsConfiguration config = new CorsConfiguration();

config.setAllowCredentials(true);

config.addAllowedOrigin("*");

// config.addAllowedOrigin("http://domain1.com");

config.addAllowedHeader("*");

config.addAllowedMethod("*");

source.registerCorsConfiguration("/api/**", config);

FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));

bean.setOrder(0); // 必须在所有Filter之前

return bean;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:VUE + UEditor 单图片跨域上传功能的实现方法
下一篇:spring boot启动时加载外部配置文件的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~