springboot跨域解决方案

Posted codingjav

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot跨域解决方案相关的知识,希望对你有一定的参考价值。

1:为什么会出现跨域问题

  出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

  简单说A应用只能访问A应用后台传来数据,B应用只能访问B应用后台传来的数据,如果A应用用Ajax获取数据时的URL地址中的协议、端口、域名其中有一个和B应用对应的话,则是A应用跨域了想获取B应用数据,是不允许的

2:什么是跨域

  当一个请求url的 协议、域名、端口 三者之间任意一个与当前页面url不同即为跨域

当前页面URL

被请求页面URL

是否跨域

      原因

http://www.test.com/

http://www.test.com/index.html

同源(协议、域名、端口号相同)

http://www.test.com/

https://www.test.com/index.html

跨域

协议不同(http/https)

http://www.test.com/

http://www.baidu.com/

跨域

主域名不同(test/baidu)

http://www.test.com/

http://blog.test.com/

跨域

子域名不同(www/blog)

http://www.test.com:8080/

http://www.test.com:7001/

跨域

端口号不同(8080/7001)

3、解决方案

3.1、配置Corsfilter全局

@EnableAsync
public class Application 
    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

    /**
     * 允许跨域请求配置
     *
     * @return a CorsFilter
     */
    @Bean
    @Order(0)
    public CorsFilter corsFilter() 
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        final CorsConfiguration config = new CorsConfiguration();
        final long corsCacheMaxAge = 18000L;
        // 允许cookies跨域
        config.setAllowCredentials(true);
        // #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
        config.addAllowedOrigin("*");
        // #允许访问的头信息,*表示全部
        config.addAllowedHeader("*");
        // 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.setMaxAge(corsCacheMaxAge);
        // 允许提交请求的方法,*表示全部允许
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        // 允许Get的请求方法
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    

3.2、实现WebMvcConfigurer 

 
@Configuration
public class CorsConfig implements WebMvcConfigurer 
  @Override
public void addCorsMappings(CorsRegistry registry)  registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allow
edMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600); 

以上是关于springboot跨域解决方案的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot项目针对跨域问题的三种解决方案

Springboot——解决跨域问题

springboot跨域解决方案

springboot跨域解决方案

Springboot如何优雅的解决ajax+自定义headers的跨域请求[转]

springboot如何解决跨域问题?