代码改变世界

spring boot跨域问题

2019-02-28 13:01  QQ~sunshine  阅读(615)  评论(0编辑  收藏  举报

  跨域是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本。它是浏览器的同源策略造成的,是浏览器对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 }