跨域是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本。它是浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。也就是如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。
什么是同一个域?同一协议,同一ip,同一端口,三同中有一不同就产生了跨域。也就是对于前后端分离来说,一定会有跨域问题,因为不是同一个服务,要不不同ip,要不不同端口。
如何在spring boot中解决这个问题,只需添加下面配置即可:
1 import org.springframework.context.annotation.Bean; 2 import org.springframework.context.annotation.Configuration; 3 import org.springframework.web.cors.CorsConfiguration; 4 import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 5 import org.springframework.web.filter.CorsFilter; 6 7 /** 8 * 跨域配置 9 */ 10 @Configuration 11 public class CorsConfig { 12 // 设置允许跨域的源 13 private static String[] originsVal = new String[]{ 14 "127.0.0.1:8080", 15 "localhost:8080", 16 "google.com", 17 "mail.google.com" 18 }; 19 20 /** 21 * 跨域过滤器 22 * 23 * @return 24 */ 25 @Bean 26 public CorsFilter corsFilter() { 27 UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 28 CorsConfiguration corsConfiguration = new CorsConfiguration(); 29 this.addAllowedOrigins(corsConfiguration); 30 corsConfiguration.addAllowedHeader("*"); //添加允许访问的头 31 corsConfiguration.addAllowedMethod("*"); //添加允许访问的方法 32 corsConfiguration.addAllowedOrigin("*"); //添加允许访问的源,这里的*已经包含了originsVal数组里的源信息 33 source.registerCorsConfiguration("/**", corsConfiguration); 34 return new CorsFilter(source); 35 } 36 37 private void addAllowedOrigins(CorsConfiguration corsConfiguration) { 38 for (String origin : originsVal) { 39 corsConfiguration.addAllowedOrigin("http://" + origin); 40 corsConfiguration.addAllowedOrigin("https://" + origin); 41 } 42 } 43 }