溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何實現全局和局部跨域

發布時間:2023-01-09 09:19:17 來源:億速云 閱讀:102 作者:iii 欄目:開發技術

SpringBoot如何實現全局和局部跨域

在現代Web開發中,跨域資源共享(CORS)是一個常見的問題。由于瀏覽器的同源策略,前端應用在訪問不同域名、端口或協議的資源時,可能會遇到跨域問題。Spring Boot 提供了多種方式來解決跨域問題,既可以在全局范圍內配置跨域,也可以在局部范圍內進行配置。本文將詳細介紹如何在Spring Boot中實現全局和局部跨域。

1. 什么是跨域?

跨域是指瀏覽器從一個域名的網頁去請求另一個域名的資源。由于瀏覽器的同源策略,默認情況下,跨域請求是被禁止的。同源策略要求請求的協議、域名和端口必須完全相同,否則就會被認為是跨域請求。

跨域請求的常見場景包括:

  • 前端應用部署在 http://localhost:8080,而后端API部署在 http://localhost:8081。
  • 前端應用部署在 http://example.com,而后端API部署在 http://api.example.com。

為了解決跨域問題,服務器需要在響應頭中添加一些特定的字段,告訴瀏覽器允許跨域請求。

2. Spring Boot 中的跨域配置

Spring Boot 提供了多種方式來處理跨域問題,既可以通過全局配置,也可以通過局部配置。下面我們將分別介紹這兩種方式。

2.1 全局跨域配置

全局跨域配置是指在應用級別對所有請求進行跨域處理。Spring Boot 提供了多種方式來實現全局跨域配置。

2.1.1 使用 @CrossOrigin 注解

@CrossOrigin 注解可以用于控制器類或方法上,以允許跨域請求。如果將其應用于控制器類上,則該類中的所有方法都將允許跨域請求。

@RestController
@CrossOrigin(origins = "*")
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在上面的例子中,@CrossOrigin(origins = "*") 表示允許所有來源的跨域請求。

2.1.2 使用 WebMvcConfigurer 配置

通過實現 WebMvcConfigurer 接口,可以在全局范圍內配置跨域。

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 WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

在上面的配置中,addMapping("/**") 表示對所有路徑應用跨域配置,allowedOrigins("*") 表示允許所有來源的跨域請求,allowedMethods 指定允許的HTTP方法,allowedHeaders 指定允許的請求頭,allowCredentials 表示是否允許發送憑證(如cookies),maxAge 表示預檢請求的緩存時間。

2.1.3 使用 CorsFilter 配置

通過自定義 CorsFilter,可以在全局范圍內配置跨域。

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 {

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

在上面的配置中,CorsConfiguration 對象用于配置跨域規則,UrlBasedCorsConfigurationSource 用于將配置應用到所有路徑。

2.2 局部跨域配置

局部跨域配置是指在特定的控制器或方法上配置跨域規則。Spring Boot 提供了 @CrossOrigin 注解來實現局部跨域配置。

2.2.1 使用 @CrossOrigin 注解

@CrossOrigin 注解可以應用于控制器類或方法上,以允許跨域請求。

@RestController
public class MyController {

    @GetMapping("/hello")
    @CrossOrigin(origins = "http://example.com")
    public String hello() {
        return "Hello, World!";
    }
}

在上面的例子中,@CrossOrigin(origins = "http://example.com") 表示只允許來自 http://example.com 的跨域請求。

2.2.2 使用 @CrossOrigin 注解的多個配置

@CrossOrigin 注解還支持多個配置項,可以根據需要靈活配置。

@RestController
public class MyController {

    @GetMapping("/hello")
    @CrossOrigin(origins = {"http://example.com", "http://localhost:8080"}, 
                 methods = {RequestMethod.GET, RequestMethod.POST}, 
                 allowedHeaders = {"Content-Type", "Authorization"}, 
                 allowCredentials = "true", 
                 maxAge = 3600)
    public String hello() {
        return "Hello, World!";
    }
}

在上面的例子中,@CrossOrigin 注解配置了多個來源、允許的HTTP方法、允許的請求頭、是否允許發送憑證以及預檢請求的緩存時間。

3. 總結

Spring Boot 提供了多種方式來處理跨域問題,既可以通過全局配置,也可以通過局部配置。全局配置適用于所有請求,而局部配置則適用于特定的控制器或方法。根據實際需求,可以選擇合適的方式來配置跨域規則。

  • 全局跨域配置:可以通過 @CrossOrigin 注解、WebMvcConfigurer 接口或 CorsFilter 來實現。
  • 局部跨域配置:可以通過 @CrossOrigin 注解來實現。

通過合理配置跨域規則,可以確保前端應用能夠順利訪問后端API,同時保證安全性。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女