跨域配置

tim-qtp...大约 1 分钟跨域脚手架

什么是跨域:协议(Http,Https)、主机、端口三者有一个不一致就是跨域请求

解决跨域的方式:

  1. 服务端在响应头添加 Access-Control-Allow-Origin:*

  2. 通过nginx代理跨域

    server {
        listen 80;
        server_name yourdomain.com;
    
        location /api/ {
            # 允许所有源跨域访问
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With';
            add_header 'Access-Control-Allow-Credentials' 'true';
    
            # 如果使用Nginx作为反向代理,请添加相应的proxy_pass配置
            # proxy_pass http://backend-server:port/api/;
    
            # 其他配置...
        }
    }
    

Java端解决方式

方式一:

@Configuration
public class GlobalCorsConfig {

    /**
     * 允许跨域调用的过滤器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 允许白名单域名进行跨域调用
        config.addAllowedOrigin("*");
        // 允许跨越发送cookie
        config.setAllowCredentials(true);
        // 放行全部原始头信息
        config.addAllowedHeader("*");
        // 允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 允许所有路径
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

方式二:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 为所有路径配置跨域
        registry.addMapping("/**")
                .allowedOrigins("*") // 允许所有源
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的 HTTP 方法
                .allowedHeaders("*") // 允许所有请求头
                .allowCredentials(true) // 允许携带凭证
                .maxAge(3600); // 预检请求缓存时间
    }
}