最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot項目解決跨域的5種實現(xiàn)過程

 更新時間:2026年05月13日 16:43:47   作者:油墨香^_^  
本文介紹了SpringBoot項目中解決跨域問題的5種方式,包括使用@CrossOrigin注解、全局配置WebMvcConfigurer、使用CorsFilter過濾器、WebFlux配置和手動配置過濾器,推薦使用全局配置WebMvcConfigurer,因為它既統(tǒng)一又靈活,適合大多數(shù)項目場景

在SpringBoot項目中,解決跨域問題主要有以下5種方式:

1. 使用@CrossOrigin注解

在Controller類或方法上添加注解

// 在類級別使用 - 該類所有接口都支持跨域
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api")
public class UserController {
    // 在方法級別使用 - 僅此方法支持跨域
    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.findAll();
    }
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userService.save(user);
    }
}

@CrossOrigin參數(shù)說明

@CrossOrigin(
    origins = "*",                    // 允許的源
    allowedHeaders = "*",             // 允許的請求頭
    methods = {RequestMethod.GET, RequestMethod.POST}, // 允許的HTTP方法
    allowCredentials = "true",        // 是否允許證書
    maxAge = 3600                     // 預檢請求緩存時間
)

2. 全局配置 - 實現(xiàn)WebMvcConfigurer

方式一:配置類方式

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 對所有接口路徑
                .allowedOriginPatterns("*")  // 支持域匹配,SpringBoot 2.4+
                // .allowedOrigins("*")      // SpringBoot 2.4之前版本使用
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

方式二:配置文件方式

# application.yml
spring:
  mvc:
    cors:
      allowed-origins: "*"
      allowed-methods: GET,POST,PUT,DELETE,OPTIONS
      allowed-headers: "*"
      allow-credentials: true
      max-age: 3600

3. 使用CorsFilter過濾器

@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        // 1. 創(chuàng)建CORS配置對象
        CorsConfiguration config = new CorsConfiguration();
        // 2. 配置CORS規(guī)則
        config.addAllowedOriginPattern("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        config.setMaxAge(3600L);
        // 3. 添加映射路徑
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

4. 使用WebFlux配置(響應式編程)

如果使用WebFlux,可以這樣配置:

@Configuration
public class CorsWebFluxConfig {
    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*");
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.setAllowCredentials(true);
        config.setMaxAge(3600L);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}

5. 手動配置過濾器

@Component
public class SimpleCorsFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
            throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        // 設置CORS頭部
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        // 處理預檢請求
        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, res);
        }
    }
    @Override
    public void init(FilterConfig filterConfig) {}
    @Override
    public void destroy() {}
}

生產(chǎn)環(huán)境推薦配置

@Configuration
public class ProductionCorsConfig implements WebMvcConfigurer {
    @Value("${cors.allowed-origins:*}")
    private String[] allowedOrigins;
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOriginPatterns(allowedOrigins)
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("Authorization", "Content-Type", "X-Requested-With")
                .exposedHeaders("X-Custom-Header")
                .allowCredentials(true)
                .maxAge(1800); // 30分鐘
        // 管理接口特殊配置
        registry.addMapping("/admin/**")
                .allowedOriginPatterns("https://admin.example.com")
                .allowedMethods("GET", "POST")
                .allowCredentials(true);
    }
}

配置說明文件

# application-prod.yml
cors:
  allowed-origins: 
    - "https://www.example.com"
    - "https://api.example.com"

總結(jié)對比

方式適用場景優(yōu)點缺點
@CrossOrigin單個接口或控制器精確控制,簡單易用重復配置,不夠統(tǒng)一
WebMvcConfigurer全局配置統(tǒng)一管理,配置靈活需要創(chuàng)建配置類
CorsFilter過濾器級別處理更底層,性能較好配置相對復雜
WebFlux配置響應式應用專為WebFlux設計僅適用于響應式
手動過濾器完全自定義最大靈活性需要手動處理所有細節(jié)

推薦使用全局配置(WebMvcConfigurer),因為它既統(tǒng)一又靈活,適合大多數(shù)項目場景。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java實現(xiàn)字符編碼轉(zhuǎn)換(utf-8/gbk)

    Java實現(xiàn)字符編碼轉(zhuǎn)換(utf-8/gbk)

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)字符編碼轉(zhuǎn)換工具,主要針對UTF-8和GBK兩種編碼格式,文中的示例代碼講解詳,需要的可以了解下
    2025-03-03
  • 如何劫持Java應用的HTTP請求

    如何劫持Java應用的HTTP請求

    這篇文章主要介紹了如何劫持Java應用的HTTP請求,幫助大家針對部分特殊的流量,希望將它引導到特定服務上,感興趣的朋友可以了解下
    2020-10-10
  • Java?數(shù)據(jù)交換?Json?和?異步請求?Ajax詳解

    Java?數(shù)據(jù)交換?Json?和?異步請求?Ajax詳解

    Json(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,采用鍵值對的形式來表示數(shù)據(jù),它廣泛應用于Web開發(fā)中,特別適合于前后端數(shù)據(jù)傳輸和存儲,這篇文章主要介紹了Java數(shù)據(jù)交換Json和異步請求Ajax,需要的朋友可以參考下
    2023-09-09
  • 利用Java理解sql的語法(實例講解)

    利用Java理解sql的語法(實例講解)

    下面小編就為大家分享一篇利用Java理解sql的語法(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • maven關于pom文件中的relativePath標簽使用

    maven關于pom文件中的relativePath標簽使用

    在Maven項目中,子工程通過<relativePath>標簽指定父工程的pom.xml位置,以確保正確繼承父工程的配置,這個標簽可以配置為默認值、空值或自定義值,默認情況下,Maven會向上一級目錄尋找父pom;若配置為空值
    2024-09-09
  • java模擬實現(xiàn)微信紅包算法

    java模擬實現(xiàn)微信紅包算法

    這篇文章主要為大家詳細介紹了java實現(xiàn)模擬微信紅包算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • java 將一個數(shù)組逆序輸出的方法

    java 將一個數(shù)組逆序輸出的方法

    今天小編就為大家分享一篇java 將一個數(shù)組逆序輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • springboot 實現(xiàn)長鏈接轉(zhuǎn)短鏈接的示例代碼

    springboot 實現(xiàn)長鏈接轉(zhuǎn)短鏈接的示例代碼

    短鏈接服務通過將長URL轉(zhuǎn)換成6位短碼,并存儲長短鏈接對應關系到數(shù)據(jù)庫中,用戶訪問短鏈接時,系統(tǒng)通過查詢數(shù)據(jù)庫并重定向到原始URL,實現(xiàn)快速訪問,本文就來介紹一下如何使用,感興趣的可以了解一下
    2024-09-09
  • 解決SpringMVC項目連接RabbitMQ出錯的問題

    解決SpringMVC項目連接RabbitMQ出錯的問題

    這篇文章主要介紹了解決SpringMVC項目連接RabbitMQ出錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • JavaEE初階教程之Java?IO流讀寫與文件操作實戰(zhàn)

    JavaEE初階教程之Java?IO流讀寫與文件操作實戰(zhàn)

    在Java編程中IO流是進行文件讀寫操作的重要組成部分,IO流提供了一種靈活、可靠的方式來處理文件和數(shù)據(jù)流,這篇文章主要介紹了JavaEE初階教程之Java?IO流讀寫與文件操作實戰(zhàn)的相關資料,需要的朋友可以參考下
    2025-12-12

最新評論

台湾省| 微博| 南京市| 崇礼县| 杭州市| 吉安市| 抚州市| 德清县| 绵阳市| 四川省| 贵港市| 文山县| 靖边县| 内江市| 成武县| 阜平县| 施秉县| 永新县| 且末县| 军事| 张家川| 张家口市| 白朗县| 中牟县| 互助| 台前县| 恩平市| 澳门| 饶河县| 靖边县| 庄河市| 苍山县| 磐石市| 武穴市| 华亭县| 县级市| 新余市| 龙门县| 肃宁县| 浮梁县| 新安县|