目前越来越多是项目都是采用前后端分离的架构设计,那么问题来了,前后端不在同域的情况下,经常会遇到访问不到,浏览器提示跨域问题。所谓跨域指的是域名不同或者端口不同或者协议不同,从而资源请求不到。
1、注解驱动
Spring 4.2后提供了@CrossOrigin注解,该注解可以标注于方法或者类上,包含了以下属性
@RequestMapping("hello")
@ResponseBody
@CrossOrigin(value = "*")
public String hello() {
return "hello, you are good";
}
2、接口编程处理
在config包,然后创建WebConfigurer,实现WebMvcConfigurer,重写addCorsMappings默认实现
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*");// 这里可以根据自己的请求方式单独限制,我这里*全部都可以
}
}
3、过滤器实现
查看官方文档,发现其还提供了基于过滤器的实现方式
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
可以关注公众号,不定期更新文章