国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

什么是跨域問題 ?Spring MVC 如何解決跨域問題 ?Spring Boot 如何解決跨域問題 ?

這篇具有很好參考價值的文章主要介紹了什么是跨域問題 ?Spring MVC 如何解決跨域問題 ?Spring Boot 如何解決跨域問題 ?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. 什么是跨域問題 ?

2. Spring MVC 如何解決跨域問題 ?

3. Spring Boot 如何解決跨域問題 ??


1. 什么是跨域問題 ?

跨域問題指的是不同站點之間,使用 ajax 無法相互調(diào)用的問題。

跨域問題的 3 種情況:

1. 協(xié)議不同,例如 http 和 https;

  • http://127.0.0.1:8080
  • https://127.0.0.1:8080

2. 域名不同;

  • 一級域名、二級域名..不同,都算跨域請求

3. 端口不同.

  • 80
  • 443

什么是跨域問題 ?Spring MVC 如何解決跨域問題 ?Spring Boot 如何解決跨域問題 ?,JavaEE進階,spring,mvc

為什么要有跨域問題 ?

????????跨域問題本質(zhì)上是瀏覽器的一種保護機制,它誕生的初衷是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。但是這個保護機制也帶來新的問題,它使得不同站點之間的正常調(diào)用,也會遇到阻礙。

2. Spring MVC 如何解決跨域問題 ?

1. 定義一個配置類;

2. 在配置類中寫一個方法,返回 WebMvcConfigurer 對象,并重寫 addCorsMappings 方法。

@Configuration
public class MyConfiguration {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                // 設(shè)置允許跨域的請求規(guī)則【響應(yīng)頭里添加標識】
                registry.addMapping("/api/**");
            }
        };
    }
}

????????跨域問題,它的請求可以到達后端,只不過在后端返回響應(yīng)給前端的時候,瀏覽器會做跨域問題的驗證。

為什么不在前端驗證 ?

因為前端代碼是可以修改的,通過開發(fā)者工具都是可以偽造的,所以在前端驗證沒有意義。

什么是跨域問題 ?Spring MVC 如何解決跨域問題 ?Spring Boot 如何解決跨域問題 ?,JavaEE進階,spring,mvc

3. Spring Boot 如何解決跨域問題 ??

在 Spring Boot 中,解決跨域問題常見的方式有 5 種 :

1. 使用 @CrossOrigin 注解實現(xiàn)跨域;【局部跨域

2. 通過配置文件實現(xiàn)跨域;最常見 - 全局跨域】

3. 通過 CorsFilter?對象實現(xiàn)跨域;【全局跨域

4. 通過 Response 對象實現(xiàn)跨域;【局部跨域

5. 通過實現(xiàn) ResponseBodyAdvice 實現(xiàn)跨域。次常見 - 全局跨域】

具體的實現(xiàn)如下:

① 使用 @CorsOrigin 注解實現(xiàn)跨域

????????@CorsOrigin 注解既可以加在類上,又可以加在方法上,修飾類表示這個類種所有接口都可以跨域,修飾方法表示這個方法可以跨域。

@RestController
@CrossOrigin(origins = "*")
public class TestController {
    @RequestMapping("/test")
    public HashMap<String,Object> test() {
        HashMap<String,Object> map = new HashMap<>();
        map.put("code",200);
        map.put("data","success");
        map.put("msg","");
        return map;
    }
}

這種方式只能實現(xiàn)局部跨域,當(dāng)一個項目中有多個類的時候,使用這種方式就會比較麻煩。

② 通過配置文件實現(xiàn)跨域

  • 創(chuàng)建一個新的配置類;
  • 添加 @Configuration 注解,實現(xiàn) WebMvcConfigurer 接口;
  • 重寫 addCorsMappings 方法,設(shè)置允許跨域。

這種方式可以實現(xiàn)全局跨域,和 Spring MVC 里面一樣:

@Configuration
public class MyConfiguration implements WebMvcConfigurer{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 設(shè)置允許跨域的請求規(guī)則
        registry.addMapping("/**")
                .allowCredentials(true) // 是否發(fā)送 Cookie
                .allowedOriginPatterns("*") // 支持跨域
                // 支持方法
                .allowedMethods(new String[]{"GET","POST","PUT","DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

③?通過 CorsFilter?對象實現(xiàn)跨域

這種方式和方式 ② 類似,只不過此處是通過給方法加上 @Bean 注解,返回一個 CorsFilter 對象

④ 通過 Response 對象實現(xiàn)跨域

這種方式是解決跨域問題最原始的方式,它可以支持所有版本的 Spring Boot,但是這種方式也是局部跨域。

@RestController
public class TestController {
    @RequestMapping("/test")
    public HashMap<String,Object> test(HttpServletResponse response) {
        // 設(shè)置跨域
        response.setHeader("Access-Control-Allow-Origin","*");
        return new HashMap<String, Object>() {{
            put("code",200);
            put("data","success");
            put("msg","");
        }};
    }
}

⑤?通過實現(xiàn) ResponseBodyAdvice 實現(xiàn)跨域

????????這個接口可以用于集中統(tǒng)一處理,在統(tǒng)一數(shù)據(jù)返回的時候,我們就可以實現(xiàn)這個接口,在數(shù)據(jù)即將返回給前端的時候,在響應(yīng)頭種加上一個 “我是自己人” 的標識,就可以實現(xiàn)跨域了,這種方式也是全局跨域。文章來源地址http://www.zghlxwxcb.cn/news/detail-689939.html

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true; // 返回 true, 才能執(zhí)行后續(xù)方式
    }
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 設(shè)置跨域
        response.getHeaders().set("Access-Control-Allow-Origin","*");
        return body;
    }
}

到了這里,關(guān)于什么是跨域問題 ?Spring MVC 如何解決跨域問題 ?Spring Boot 如何解決跨域問題 ?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 解決Spring Boot前后端分離開發(fā)模式中的跨域問題

    在實際開發(fā)中,經(jīng)常會遇到前端Vue應(yīng)用與后端Spring Boot API接口存在跨域訪問的問題。本篇博客將分享解決Spring Boot前端Vue跨域問題的實戰(zhàn)經(jīng)驗,幫助開發(fā)者快速解決該問題。 跨域問題是由于瀏覽器的同源策略引起的。同源策略限制了從一個源加載的文檔或腳本如何與來自另一

    2024年02月10日
    瀏覽(571)
  • Spring Boot學(xué)習(xí)隨筆- 后端實現(xiàn)全局異常處理(HandlerExceptionResolver),前后端解決跨域問題(@CrossOrigin(局部解決)自定義跨域配置類(全局))

    Spring Boot學(xué)習(xí)隨筆- 后端實現(xiàn)全局異常處理(HandlerExceptionResolver),前后端解決跨域問題(@CrossOrigin(局部解決)自定義跨域配置類(全局))

    學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程 異常處理作用:用來解決整合系統(tǒng)中任意一個控制器拋出異常時的統(tǒng)一處理入口 傳統(tǒng)單體架構(gòu)下的處理方式 配置全局異常處理類 resolveException :當(dāng)控制器方法出現(xiàn)異常時,如果該方法沒有try...catch,則會進入當(dāng)前方法 針

    2024年02月04日
    瀏覽(95)
  • Spring Cloud Gateway 、 Spring MVC 聯(lián)合跨域問題和遇到的坑

    Spring Cloud Gateway 、 Spring MVC 聯(lián)合跨域問題和遇到的坑

    遇到問題 此問題網(wǎng)上很多解決方案,其實各個都沒有錯,各個解決方案都是正確,但是分類成好幾個類型統(tǒng)一引起的,把網(wǎng)上的中解決方案在放在一起,就會出現(xiàn)不但不可以解決問題,反而更加引起混亂,明明已經(jīng)正確按不同方法實現(xiàn)了一遍,就是不行 (1)spring mvc 單獨跨

    2024年02月09日
    瀏覽(163)
  • Spring Boot跨域問題簡介

    在Web開發(fā)中,跨域指的是在瀏覽器中訪問一個不同于當(dāng)前域名的資源。瀏覽器出于安全考慮,限制了這種跨域資源的訪問。具體來說,當(dāng)瀏覽器使用XMLHttpRequest或Fetch API發(fā)送跨域請求時,目標服務(wù)器必須在響應(yīng)頭中包含特定的CORS(跨源資源共享)規(guī)則,否則瀏覽器會阻止該請

    2024年02月09日
    瀏覽(94)
  • 如何在Spring Boot中使用Spring MVC

    如何在Spring Boot中使用Spring MVC

    目錄 1.MVC 2.Spring MVC 3.Spring Boot中使用Spring MVC 3.1.配置 3.1.1.文件配置 3.1.2.代碼配置 3.2.使用 3.2.1.映射處理器 3.2.2.傳參 3.2.3.參數(shù)轉(zhuǎn)換 3.2.4.數(shù)據(jù)校驗 3.2.5.數(shù)據(jù)模型 3.2.6.視圖和解析器 3.2.7.攔截器 MVC 是一種常見的軟件設(shè)計模式,用于分離應(yīng)用程序的不同部分以實現(xiàn)松散耦合和高內(nèi)

    2023年04月15日
    瀏覽(89)
  • 快速解決Spring Boot跨域困擾:使用CORS實現(xiàn)無縫跨域支持

    什么是跨域? 跨域(Cross-Origin Issue)的存在是因為瀏覽器的安全限制,它防止惡意網(wǎng)站利用跨域請求來獲取用戶的敏感信息或執(zhí)行惡意操作。瀏覽器通過實施同源策略來限制網(wǎng)頁在不同源之間進行資源訪問或交互的情況。當(dāng)一個網(wǎng)頁的協(xié)議、域名、或端口與當(dāng)前頁面的協(xié)議、

    2024年02月12日
    瀏覽(82)
  • Spring Cloud Gateway 解決跨域問題

    Spring Cloud Gateway 解決跨域問題

    ?? 注:文中的解決方案在 Spring Cloud 2021.0.4、Spring Boot 2.7.4 版本中得到驗證,完美解決,其他版本可參考 ??請求流程如下圖:通過nginx反向代理到網(wǎng)關(guān),在通過網(wǎng)關(guān)轉(zhuǎn)發(fā)到具體的服務(wù)上 ??關(guān)于跨域的理論百度上已經(jīng)有很多,網(wǎng)關(guān)到其他服務(wù)主要是通過注冊中心去找的服

    2024年02月11日
    瀏覽(89)
  • Spring MVC攔截器和跨域請求

    Spring MVC攔截器和跨域請求

    SpringMVC的攔截器(Interceptor)也是AOP思想的一種實現(xiàn)方式。它與Servlet的過濾器(Filter)功能類似,主要用于攔截用戶的請求并做相應(yīng)的處理,通常應(yīng)用在權(quán)限驗證、記錄請求信息的日志、判斷用戶是否登錄等功能上。 攔截器和過濾器的區(qū)別 攔截器是SpringMVC組件,而過濾器是

    2024年02月16日
    瀏覽(89)
  • Java項目調(diào)試實戰(zhàn):如何高效調(diào)試Spring Boot項目中的GET請求,并通過equalsIgnoreCase()解決大小寫不一致問題

    Java項目調(diào)試實戰(zhàn):如何高效調(diào)試Spring Boot項目中的GET請求,并通過equalsIgnoreCase()解決大小寫不一致問題

    最近運行java項目的過程中,遇到一個問題。 在 @檀越 的遠程指導(dǎo)下,一步步調(diào)試的過程中,發(fā)現(xiàn)是由于大小寫不一致,導(dǎo)致判斷不是同一個字段導(dǎo)致的。 最后將equals()替換為equalsIgnoreCase()后,成功解決問題 ! equals() 會判斷大小寫區(qū)別,equalsIgnoreCase() 不會判斷大小寫。 好久

    2024年02月03日
    瀏覽(89)
  • Spring Security系列教程之解決Spring Security環(huán)境中的跨域問題

    Spring Security系列教程之解決Spring Security環(huán)境中的跨域問題

    一. 啟用Spring Security 的CORS支持 1. 普通的跨域 方式1:在接口方法上利用@CrossOrigin注解解決跨域問題 方式2:通過實現(xiàn)WebMvcConfigurer接口來解決跨域問題 二. Spring Security環(huán)境下的跨域問題解決 通過上面的配置,我們已經(jīng)解決了Ajax的跨域請求問題,但是這個案例中也有潛在的威脅

    2024年02月05日
    瀏覽(88)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包