1. 程式人生 > 實用技巧 >springboot 跨域問題

springboot 跨域問題

springboot 跨域問題

概念

什麼是跨域訪問?

JavaScript出於安全方面的考慮,做了一個同源策略的限制,也就是說不允許跨域訪問其他資源,更通俗的說就是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實施的安全限制。

什麼是同源策略?

所謂的同源是指域名、協議、埠均為相同。

同源策略的作用

同源政策的目的是為了防止惡意網站通過冒充使用者來竊取使用者的資料資訊,同源策略提高了攻擊成本。

同源策略限制了以下行為:

  • Cookie、LocalStorage 和 IndexDB 無法讀取;
  • DOM 和 JS 物件無法獲取;
  • Ajax請求傳送不出去。

springboot 解決跨域問題

方式1

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

@Configuration
public class SpringMVCConfig implements WebMvcConfigurer {

    //跨域設定
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //針對的對映
        registry.addMapping("/**")
                //針對的origin域名
                .allowedOrigins("*")
                //針對的方法
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                //是否允許傳送Cookie
                .allowCredentials(true)
                //從預檢請求得到相應的最大時間,預設30分鐘
                .maxAge(3600)
                //針對的請求頭
                .allowedHeaders("*");
    }

}

方式二

@Configuration
public class CorsConfig{
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}