为什么会有跨域问题

同源策略(Same-Origin Policy):是一个安全策略。认定 (协议、域名、端口)全部相同,认定是同源。非同源会被浏览器所拦截,不允许相互通信。

http://127.0.0.1:8080 与 http://localhost:8080 因为域名不同,所以不是同源,会报跨域问题

http://127.0.0.1:8080 与 https://127.0.0.1:8080 因为协议不同,所以不是同源,会报跨域问题

http://127.0.0.1:8080 与 http://127.0.0.1:8081 因为端口不同,所以不是同源,会报跨域问题

只有协议(http与http一致)、域名与域名一致、端口与端口一致才认定为同源,就不会有跨域问题。

比如 http://zanglikun.com 与 http://zanglikun.com/1/2/3,就不会跨域

方式一 Java代码

启动类加上 @CrossOrigin 也可单独加在方法上

// 允许跨域
@CrossOrigin

配置类 CorsConfig 继承WebMvcConfigurerAdapter 重写addCorsMappings 方法

/**
 * @Author: 臧立昆
 * @Email: 740969606@qq.com
 * @Date: 2020/8/3
 * @Time: 13:47
 */

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry
                // 为指定的路径模式启用跨域请求处理
                .addMapping("/**")

                // 允许源来自*代表任何地方   Springboot 2.4 之前用.allowedOrigins("*")
                .allowedOriginPatterns("*")

                // 是否允许传递cookie,默认不允许
                .allowCredentials(true)

                // 配置允许的方法 源码注释说:GET、HEAD、POST 默认是允许的
                .allowedMethods("GET", "POST", "DELETE", "PUT", "HEAD")
                //.allowedMethods("GET", "POST", "DELETE", "PUT", "HEAD", "OPTIONS", "TRACE","CONNECT")

                // 配置客户端缓存时间(以秒为单位)默认1800秒也就是30分钟
                .maxAge(3600);

    }
}

方式二 Nginx 反向代理

Nginx 正常的反向代理 proxy_pass 可以解决跨域。因为跨域是浏览器人为的,但是Nginx是服务器,他发送的请求把结果转发而已!

方式三 (没实际用过,用的时候 建议现百度当前项目boot版本)

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;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",config);
        return new CorsFilter(source);
    }
}
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤