Java中的跨域问题

1.什么是跨域?

跨域CORS)是指不同域名之间相互访问。是指浏览器不能访问其他网站的脚本,它是由浏览器的同源策略造成的,同源策略是浏览器对于JavaScript所定义的安全限制策略
由于现在在开发中大多数都是前后端分离的项目,所以会导致跨域问题,下面我们先了解跨域再解决跨域问题。
同源策略:是指协议,域名,端口都要相同,其中有一个不同就会产生跨域问题。

2.什么情况下会遇到跨域问题呢?

如果不是同一协议、同一IP地址、同一端口号,这三个条件如果有一个不满足就会产生跨域问题。
当协议、IP地址和端口号相同时,就可以访问不同的文件。

3.跨域的流程

参考地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
Java中的跨域问题_第1张图片
要想实现跨域,浏览器要先发出预检请求,等到服务器同意预检请求,然后才能发生真实请求。

4.解决跨域问题

在网关中定义一个类,该类用来过滤。

代码如下:

package com.dream.config;

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;

/**
 * 配置过滤器,解决跨域问题
 */
@Configuration
public class CorsConfig {

    private CorsConfiguration buildConfig(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");//允许任何域名使用
        corsConfiguration.addAllowedHeader("*");//允许任何头
        corsConfiguration.addAllowedMethod("*");//允许任何方法(post、get等)
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",buildConfig());
        //向Spring容器中注入一个过滤器
        return new CorsFilter(source);
    }
}

配置:

属性 说明
Access-Control-Allow-Origin: 支持哪些来源的请求跨域
Access-Control-Allow-Methods: 支持哪些方法跨域
Access-Control-Allow-Credentials: 跨域请求默认不包含cookie,设置为true就可以包含cookie
Access-Control-Expose-Headers: 跨域请求暴露的字段。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里边指定
Access-Control-Max-Age: 表明该响应的有效时间为多少秒。在有效时间内,浏览器无须为同一请求再次发起预检请求。请注意,浏览器自身维护了一个最大有效时间,如果该首部字段的值超过了最大有效时间,将不会生效

你可能感兴趣的:(SpringBoot,java,spring,http)