SpringBoot設置支持跨域請求


跨域:現代瀏覽器出全的考慮,在http/https請求時必須遵守同源策略,否則即使跨域的http/https 請求,默認情況下是被禁止的,ip(域名)不同、或者端口不同、協議不同(比如http、https) 都會造成跨域問題。

一、前端解決方案

  1. 使用 JSONP 來支持跨域的請求,JSONP 實現跨域請求的原理簡單的說,就是動態創建
    script 標簽,然后利用 script 的 SRC 不受同源策略約束來跨域獲取數據。缺點是需
    要后端配合輸出特定的返回信息。
  2. 利用反應代理的機制來解決跨域的問題,前端請求的時候先將請求發送到同源地址的后
    端,通過后端請求轉發來避免跨域的訪問。

后來 HTML5 支持了 CORS 協議。CORS 是一個 W3C 標准,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務器,發出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過服務器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支持 CORS、並且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發起跨域請求。

前端使用了 CORS 協議,就需要后端設置支持非同源的請求,對於SpringBoot 對於CORS 同樣有着良好的支持,
首先附上官網地址:
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-cors

二、java跨域的三種配置方式

  • 方式一:配置過濾器(全局配置)
@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
          config.addAllowedOrigin("*");
          config.setAllowCredentials(true);
          config.addAllowedMethod("*");
          config.addAllowedHeader("*");
          config.addExposedHeader("*");

        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        return new CorsFilter(configSource);
    }
}
  • 方式二:配置攔截器 (全局配置)
@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter  {

    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/**")  
                .allowCredentials(true)  
                .allowedHeaders("*")  
                .allowedOrigins("*")  
                .allowedMethods("*");  

    }  
}
  • 方式三: 單個請求的跨域通過 @CrossOrigin 注解來實現
@RequestMapping("/hello")
@CrossOrigin("http://localhost:8080") 
public String hello( ){
	return "Hello World";
}

參考資料:https://blog.csdn.net/fxbin123/article/details/80603678


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM