欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot3解決跨域的幾種方式小結(jié)

 更新時間:2024年03月04日 09:29:04   作者:蒾酒  
這篇文章主要介紹了springboot3解決跨域的幾種方式,文中通過代碼示例給大家介紹的非常詳細,對大家的解決跨域有一定的幫助,需要的朋友可以參考下

1.前言

本文介紹了spring boot中三種解決跨域問題的方式,堅持看完相信對你有幫助。

2.何為跨域

跨域問題是指在 Web 開發(fā)中,一個網(wǎng)頁的 JavaScript 代碼通過 AJAX 請求后端服務(wù)器接口時,如果請求的目標地址與當前頁面的地址不在同一個域(域名、端口或協(xié)議任何一項不同),就會產(chǎn)生跨域問題。這種情況下,根據(jù)瀏覽器的安全機制(同源策略)就會會限制頁面的跨域請求,以防止惡意網(wǎng)站對其他網(wǎng)站的訪問和操作,保護用戶信息安全。

3.跨域問題出現(xiàn)特征

1.沒有狀態(tài)碼信息

如果你看到某個請求似乎“失敗了”,但并沒有具體的HTTP狀態(tài)碼,這可能是因為瀏覽器出于安全原因阻止了對響應(yīng)的訪問。在開發(fā)者工具的網(wǎng)絡(luò)(Network)面板中,這樣的請求可能會被標記為“cancelled”或者沒有顯示狀態(tài)碼。

2.控制臺報錯

瀏覽器通常會在控制臺(Console)中打印一條錯誤消息,說明因為CORS策略,請求被阻止了

4.方式一:使用 @CrossOrigin 注解

這是最直接簡單的方式,可以精確控制所有接口

使用方法:在你的控制器類或者控制器方法上添加 @CrossOrigin 注解,可以精確控制某個控制器類、以及下面的某個方法的允許跨域的來源、允許的請求頭、允許的請求方法等配置。

示例代碼:

@RestController
@RequestMapping("/user")
@CrossOrigin(origins = "*")//允許所有來源的請求跨域
@Tag(name = "用戶模塊")
public class UserController {
    private final UserService userService;
 
    public UserController(UserService userService) {
        this.userService = userService;
    }
 
    @PostMapping("/login")
    @Operation(summary = "用戶登錄")
    public UserLoginVO login(@RequestBody @Validated UserLoginDTO userLoginDTO) {
        return userService.login(userLoginDTO);
    }
 
}

這種方式解決跨域需要在每個控制器上加注解,屬于重復(fù)勞動對于不需要精確控制的場景屬于重復(fù)勞動??梢钥聪孪旅娣绞?/p>

5.方式二:自定義 WebMvcConfigurer

通過實現(xiàn) WebMvcConfigurer 接口來自定義 WebMvc 配置,并覆蓋 addCorsMappings 方法以配置全局跨域規(guī)則。

示例代碼:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
/**
 * @author mijiupro
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 對所有路徑生效
                .allowedOrigins("*") //允許所有源地址
                // .allowedOrigins("https://mijiupro.com","https://mijiu.com ") // 允許的源地址(數(shù)組)
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允許的請求方法
                .allowedHeaders("*"); // 允許的請求頭
    }
}

這種方式實現(xiàn)了全局的配置,但是無法細膩到控制某個方法

6.方式三:使用 Filter 進行跨域配置

創(chuàng)建一個跨域過濾器,在其中設(shè)置允許的跨域規(guī)則,并將該過濾器添加到 Spring Boot 的過濾器鏈中。

示例代碼:

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
 
import java.io.IOException;
 
/**
 * @author mijiupro
 */
@Component
public class CorsFilter implements Filter {
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 將 ServletResponse 轉(zhuǎn)換為 HttpServletResponse
        HttpServletResponse httpResponse = (HttpServletResponse) response;
 
        // 設(shè)置允許跨域請求的源地址
        httpResponse.setHeader("Access-Control-Allow-Origin", "https://mijiupro.com");
 
        // 設(shè)置允許的請求方法
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
 
        // 設(shè)置允許的請求頭
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");
 
        // 繼續(xù)執(zhí)行 Filter 鏈
        chain.doFilter(request, response);
    }
}

7.最后

這三種spring boot中解決跨域的方式通常第二種跟第一種使用的最多,對于不需要細膩控制到某個接口方法的推薦使用第二種全局配置解決。

以上就是springboot3解決跨域的幾種方式小結(jié)的詳細內(nèi)容,更多關(guān)于springboot3解決跨域的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java框架入門之簡單介紹SpringBoot框架

    Java框架入門之簡單介紹SpringBoot框架

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot框架展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java編程實現(xiàn)獲取mp3時長及播放mp3文件的方法

    Java編程實現(xiàn)獲取mp3時長及播放mp3文件的方法

    這篇文章主要介紹了Java編程實現(xiàn)獲取mp3時長及播放mp3文件的方法,涉及java基于jaudiotagger與jl包對MP3音頻文件屬性操作及音頻播放相關(guān)操作技巧,并提供了相關(guān)jar包的本站下載,需要的朋友可以參考下
    2018-02-02
  • Java中的CountDownLatch、CyclicBarrier和semaphore實現(xiàn)原理解讀

    Java中的CountDownLatch、CyclicBarrier和semaphore實現(xiàn)原理解讀

    這篇文章主要介紹了Java中的CountDownLatch、CyclicBarrier和semaphore實現(xiàn)原理詳解,CountDownLatch中調(diào)用await方法線程需要等待所有調(diào)用countDown方法的線程執(zhí)行,這就很適合一個業(yè)務(wù)需要一些準備條件,等準備條件準備好之后再繼續(xù)執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • Java內(nèi)存管理垃圾回收基礎(chǔ)詳解

    Java內(nèi)存管理垃圾回收基礎(chǔ)詳解

    這篇文章主要為大家介紹了Java內(nèi)存管理垃圾回收基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java實現(xiàn)平面山脈模型

    java實現(xiàn)平面山脈模型

    這篇文章主要為大家詳細介紹了java實現(xiàn)平面山脈模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • spring?@value無法取值多個properties文件的解決

    spring?@value無法取值多個properties文件的解決

    這篇文章主要介紹了spring?@value無法取值多個properties文件的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java開發(fā)中遇到的異常匯總詳解

    java開發(fā)中遇到的異常匯總詳解

    這篇文章主要介紹了java開發(fā)中遇到的異常匯總詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • springboot中jsp配置tiles全過程

    springboot中jsp配置tiles全過程

    這篇文章主要介紹了springboot中jsp配置tiles全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Go Java 算法之迷你語法分析器示例詳解

    Go Java 算法之迷你語法分析器示例詳解

    這篇文章主要為大家介紹了Go Java 算法之迷你語法分析器示例詳解,
    有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SpringBoot之@Aspect注解解讀

    SpringBoot之@Aspect注解解讀

    這篇文章主要介紹了SpringBoot之@Aspect注解解讀,AOP是面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù),而@Aspect 就是把一個類定義為切面供容器讀取,需要的朋友可以參考下
    2024-01-01

最新評論