SpringBoot跨域配置詳解

一、SpringBoot跨域配置不允許

默認情況下,SpringBoot應用程序不允許跨域訪問,這可以有效地保護應用程序數據的安全性。如果你想啟用跨域訪問,你需要進行相應的配置。

二、SpringBoot配置類

在SpringBoot中,我們可以通過創建一個配置類來處理跨域請求。具體步驟如下:

  1. 創建一個類,並使用註解 @Configuration。
  2. 在類中創建一個方法,在方法上面使用註解 @Bean,並返回一個類型為 WebMvcConfigurer 的對象。
  3. 在 WebMvcConfigurer 中配置跨域請求的相關參數,例如允許訪問的域名、允許的方法、允許的頭信息等。

下面是示例代碼:

@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                super.addCorsMappings(registry);
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                        .allowedHeaders("*")
                        .allowCredentials(true)
                        .maxAge(3600);
            }
         };
    }
}

三、SpringBoot跨域配置不生效

如果你的配置無效,可能是你的配置被其他高優先級的配置覆蓋了。這時,你可以嘗試在應用程序的配置文件(application.properties 或 application.yml)中添加以下參數:

spring.mvc.dispatch-options-request=true

四、SpringBoot跨域配置文件在哪

SpringBoot的跨域配置文件可以放在 application.properties 或 application.yml 中,具體可以根據你的需要進行選擇。

下面是示例代碼:

# application.properties
spring.mvc.dispatch-options-request=true
spring.mvc.cors.allow-credentials=true
spring.mvc.cors.allowed-origins=*
spring.mvc.cors.allowed-methods=GET, POST, PUT, DELETE, OPTIONS
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.max-age=3600

五、SpringBoot跨域配置無效

如果你的跨域配置依然無效,可能是你的請求沒有通過 Spring MVC 的控制器進行處理,而是通過其他方式進行處理。這時你可以使用過濾器來進行配置,具體可以參考以下代碼:

public class CorsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String origin = request.getHeader("Origin");
        if (StringUtils.isNotBlank(origin)) {
            response.setHeader("Access-Control-Allow-Origin", origin);
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
            response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
            response.setHeader("Access-Control-Max-Age", "3600");
        }
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

六、SpringBoot配置SSL

如果你的應用程序使用了SSL連接,你需要進行相應的配置才能正確地處理跨域請求:

# application.properties
server.port=443
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

七、SpringBoot跨域配置未生效

如果你的跨域配置依然未生效,可能是你的應用程序正在使用 Spring Security 進行安全控制,這時你需要在配置類中添加如下代碼:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable();
    }
}

八、SpringBoot跨域實現方式

目前,SpringBoot實現跨域請求的方式有以下幾種:

  1. 配置類方式
  2. 過濾器方式
  3. 使用註解方式(@CrossOrigin)
  4. 使用 WebSecurityConfigurerAdapter 配置方式

以上實現方式都可以有效地解決跨域請求的問題,但具體使用哪種方式,需要根據自己的需求進行選擇,並且需要注意優先級問題。

原創文章,作者:MVOS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/136403.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MVOS的頭像MVOS
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論