最近一段时间中,在编写的springboot项目中需要解决不同系统之间进行跨域访问的问题,由于多个系统之间需要进行数据的传递,而项目之间又需要请求其他项目的接口获取数据,因此我根据网上查到的资料,通过Cors来解决不同系统之间跨域访问请求被拒绝的问题。
CORS(Cross-Origin Resource Sharing)“跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制,CORS在很多地方都有被使用,微信支付的JS支付就是通过JS向微信服务器发送跨域请求。开放Ajax访问可被跨域访问的服务器大大减少了后台开发的工作,前后台工作也可以得到很好的明确以及分工,下面我们就看讲一下如何让你的SpringBoot项目支持CORS跨域。
1.首先,你需要去构建你自己的SpringBoot项目,在项目中添加Web依赖即可,当然你也可以添加其他你需要用到的依赖。
这里我不详细的描述如何去创建一个springboot项目了,由于他的过程相对来说比较简单,你也可以去网上查找创建springboot项目的资料,或者查看我的其他博客去创建一个springboot项目。
2.在springboot项目中添加Cors配置文件。
CORSConfiguration
你可以在自己项目中的/src/main/java/下新建一个com/demo/config(名字可自己起,不影响)的包(package),在里面右击New 一个class ,创建一个类,名称为CorsConfig(名字自起)
cors配置类内容代码如下:
package com.demo.config;
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 {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用
corsConfiguration.addAllowedHeader("*"); // 允许任何头
corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等)
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 对接口配置跨域设置
return new CorsFilter(source);
}
}
上述为配置类的代码。下面我们来描述一下cors配置类中相关内容。
根据上图,在buildConfig方法中,我们知道ajax发送url请求时仅限于访问本站资源,而cors配置则允许任何域名访问资源,允许任意请求头部,以及允许任意请求方式。这就使得跨域访问得以实现。当然,个人认为这样的设置方式是较为不安全的,你可以根据自己需要访问资源内容的不同,去限制访问 资源的格式,这样能够使得跨域访问资源更为安全。
只需要在你的springboot项目中添加配置类CORSConfig文件即可完成对跨域访问请求的配置以及实现了。