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

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

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

1.前言

本文介紹了spring boot中三種解決跨域問(wèn)題的方式,堅(jiān)持看完相信對(duì)你有幫助。

2.何為跨域

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

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

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

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

2.控制臺(tái)報(bào)錯(cuò)

瀏覽器通常會(huì)在控制臺(tái)(Console)中打印一條錯(cuò)誤消息,說(shuō)明因?yàn)镃ORS策略,請(qǐng)求被阻止了

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

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

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

示例代碼:

@RestController
@RequestMapping("/user")
@CrossOrigin(origins = "*")//允許所有來(lái)源的請(qǐng)求跨域
@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);
    }
 
}

這種方式解決跨域需要在每個(gè)控制器上加注解,屬于重復(fù)勞動(dòng)對(duì)于不需要精確控制的場(chǎng)景屬于重復(fù)勞動(dòng)。可以看下下面方式

5.方式二:自定義 WebMvcConfigurer

通過(guò)實(shí)現(xiàn) WebMvcConfigurer 接口來(lái)自定義 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("/**") // 對(duì)所有路徑生效
                .allowedOrigins("*") //允許所有源地址
                // .allowedOrigins("https://mijiupro.com","https://mijiu.com ") // 允許的源地址(數(shù)組)
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允許的請(qǐng)求方法
                .allowedHeaders("*"); // 允許的請(qǐng)求頭
    }
}

這種方式實(shí)現(xiàn)了全局的配置,但是無(wú)法細(xì)膩到控制某個(gè)方法

6.方式三:使用 Filter 進(jìn)行跨域配置

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

示例代碼:

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è)置允許跨域請(qǐng)求的源地址
        httpResponse.setHeader("Access-Control-Allow-Origin", "https://mijiupro.com");
 
        // 設(shè)置允許的請(qǐng)求方法
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
 
        // 設(shè)置允許的請(qǐng)求頭
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");
 
        // 繼續(xù)執(zhí)行 Filter 鏈
        chain.doFilter(request, response);
    }
}

7.最后

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

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

相關(guān)文章

  • Java中靜態(tài)代理的使用與原理詳解

    Java中靜態(tài)代理的使用與原理詳解

    這篇文章主要介紹了Java中靜態(tài)代理的使用與原理詳解,代理模式是為一個(gè)對(duì)象提供一個(gè)替身,以控制對(duì)這個(gè)對(duì)象的訪問(wèn),即通過(guò)代理對(duì)象訪問(wèn)目標(biāo)對(duì)象.這樣做的好處是:可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對(duì)象的功能,需要的朋友可以參考下
    2023-09-09
  • Java命令行參數(shù)解析工具jcommander詳解

    Java命令行參數(shù)解析工具jcommander詳解

    這篇文章主要為大家介紹了Java命令行參數(shù)解析工具jcommander命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南

    關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南

    這篇文章主要介紹了關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • hutool實(shí)戰(zhàn):IoUtil 流操作工具類(將內(nèi)容寫(xiě)到流中)

    hutool實(shí)戰(zhàn):IoUtil 流操作工具類(將內(nèi)容寫(xiě)到流中)

    這篇文章主要介紹了Go語(yǔ)言的io.ioutil標(biāo)準(zhǔn)庫(kù)使用,是Golang入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下,如果能給你帶來(lái)幫助,請(qǐng)多多關(guān)注腳本之家的其他內(nèi)容
    2021-06-06
  • Spring手寫(xiě)簡(jiǎn)化版MVC流程詳解

    Spring手寫(xiě)簡(jiǎn)化版MVC流程詳解

    Spring MVC是Spring Framework的一部分,是基于Java實(shí)現(xiàn)MVC的輕量級(jí)Web框架。本文將通過(guò)簡(jiǎn)單示例帶大家掌握SpringMVC簡(jiǎn)化版手寫(xiě)方法,感興趣的可以了解一下
    2022-11-11
  • Spring整合Weblogic jms實(shí)例詳解

    Spring整合Weblogic jms實(shí)例詳解

    這篇文章主要介紹了Spring整合Weblogic jms實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程

    Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程

    這篇文章主要介紹了Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程,需要的朋友可以參考下
    2020-10-10
  • MyBatis-Plus實(shí)現(xiàn)連表查詢的方法實(shí)例

    MyBatis-Plus實(shí)現(xiàn)連表查詢的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus實(shí)現(xiàn)連表查詢的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 使用log4j2關(guān)閉debug日志

    使用log4j2關(guān)閉debug日志

    這篇文章主要介紹了使用log4j2關(guān)閉debug日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 使用java寫(xiě)的矩陣乘法實(shí)例(Strassen算法)

    使用java寫(xiě)的矩陣乘法實(shí)例(Strassen算法)

    這篇文章主要給大家介紹了關(guān)于如何使用java寫(xiě)的矩陣乘法(Strassen算法)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論

巨鹿县| 邯郸县| 柳河县| 浮梁县| 故城县| 蕉岭县| 绥德县| 建德市| 徐州市| 驻马店市| 进贤县| 汶川县| 大埔区| 江津市| 察雅县| 抚松县| 邹平县| 灵璧县| 闸北区| 怀宁县| 马尔康县| 兰州市| 乃东县| 门头沟区| 辽阳市| 葵青区| 平昌县| 嵩明县| 商水县| 六安市| 宁波市| 砚山县| 道孚县| 永康市| 奉化市| 瓮安县| 惠东县| 崇信县| 丰城市| 仁寿县| 西乡县|