问题描述
- 项目采用前后端分离开发,当后端包发到测试环境后,测试环境一切正常,但是前端通过本地localhost的方式访问后端接口,报跨域异常
问题定位
- 测试环境之所以一切正常,是因为前后端的域名一致,自己写的拦截器认为不存在跨域,但是当前端本地调用时,由于后端是在测试环境,前端是在本地环境,两边域名不一致,导致跨域
解决方式
- 使用 springframework 的 CorsFilter类实现跨域资源共享,解决该问题
import org.springframework.boot.web.servlet.FilterRegistrationBean;
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 CrossDomainAutoConfig {
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.setMaxAge(1209600l);
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(3);
return bean;
}
}
先自我介绍一下,小编13年毕业于厦门大学,14年在外包公司中软干过,后来去过微软、华为等大厂,20年进入鹅厂担任架构师,直到现在。这一路走来,深知大多数初中级java工程师,想要提升技能,往往需要自己长时间的摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率不仅低效而且还很漫长,很容易就碰到天花板致技术停止不前。 因此我收集整理了一份《java开发全套学习资料》送给大家,里面包含了Spring全家桶,MySQL,中间件Redis、kafka,MQ消息,Zookeeper等java全系列资料,非常适合初中高级各个阶段同行学习,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料,后面抽时间定期更新一些干货文章,如果你喜欢,也可添加下方名片学习交流 (๑◡๑)