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

Spring實(shí)現(xiàn)跨域的幾種方式小結(jié)

 更新時(shí)間:2023年07月24日 10:18:29   作者:這是剃刀黨的命令  
這篇文章主要給大家總結(jié)了幾種Spring實(shí)現(xiàn)跨域的方式,文中通過代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)活工作有一定的幫助,需要的朋友可以參考下

1.同源策略

所謂同源(即指在同一個(gè)域)就是兩個(gè)頁(yè)面具有相同的協(xié)議(protocol),主機(jī)(host)和端口號(hào)(port)

2.什么是跨域

既然都知道什么是同源策略,那說穿了,只要協(xié)議,主機(jī),端口號(hào)有一個(gè)不同就跨域唄。

3.后端實(shí)現(xiàn)跨域的幾種方法

  • 返回新的CorsFilter

  • 重寫 WebMvcConfigurer

  • 使用注解 @CrossOrigin

  • 手動(dòng)設(shè)置響應(yīng)頭 (HttpServletResponse)

  • 自定web filter 實(shí)現(xiàn)跨域 注意:

  • CorFilter / WebMvConfigurer / @CrossOriginspringBoot 1.3以后才支持的。
  • 上面前兩種方式屬于全局 CORS 配置,后兩種屬于局部 CORS配置。如果使用了局部跨域是會(huì)覆蓋全局跨域。正常人都用局部跨域吧?
  • 其實(shí)無(wú)論哪種方案,最終目的都是修改響應(yīng)頭,向響應(yīng)頭中添加瀏覽器所要求的數(shù)據(jù),進(jìn)而實(shí)現(xiàn)跨域。

1.返回新的 CorsFilter(全局跨域)(基于過濾器)

CorsFilter 是 Spring 框架提供的一個(gè)用于處理跨域的過濾器,注意了,人家是屬于spring的,不是JDK的,不要瞎搞關(guān)系

// 原CORSFilter
@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter  corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 允許cookies跨域
        config.setAllowCredentials(true); 
        // #允許向該服務(wù)器提交請(qǐng)求的URI,*表示全部允許,自定義可以添加多個(gè),在SpringMVC中,如果設(shè)成*,會(huì)自動(dòng)轉(zhuǎn)成當(dāng)前請(qǐng)求頭中的Origin
        config.addAllowedOrigin("*");
        // #允許訪問的頭信息,*表示全部,可以添加多個(gè)
        config.addAllowedHeader("*");
        // 預(yù)檢請(qǐng)求的緩存時(shí)間(秒),即在這個(gè)時(shí)間段里,對(duì)于相同的跨域請(qǐng)求不會(huì)再預(yù)檢了
        config.setMaxAge(1800L);
        // 允許提交請(qǐng)求的方法,*表示全部允許,一般OPTIONS,GET,POST三個(gè)夠了
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //對(duì)所有接口都有效
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

2.重寫 WebMvcConfigurer我們現(xiàn)在需要對(duì)請(qǐng)求路徑進(jìn)行攔截,要實(shí)現(xiàn)這個(gè)需求就要添加攔截器(基于攔截器)

在Spring Boot 1.5版本都是靠重寫WebMvcConfigurerAdapter的方法來(lái)添加自定義攔截器,消息轉(zhuǎn)換器等。SpringBoot 2.0 后,該類被標(biāo)記為@Deprecated(棄用)

3.使用注解 @CrossOrigin

在控制器(類上)上使用注解 @CrossOrigin:表示該類的所有方法允許跨域 在方法上使用注解 @CrossOrigin:

原理:當(dāng)我們使用@CrossOrigin注解時(shí),程序在底層添加了一個(gè)攔截器來(lái)修改response的headers屬性,從而解決跨域問題

4.手動(dòng)設(shè)置響應(yīng)頭 (HttpServletResponse)

@RequestMapping("/index")
public String index(HttpServletResponse response) {
    response.addHeader("Access-Allow-Control-Origin","*");
    return "index";
}

有點(diǎn)抖機(jī)靈

5.自定web filter 實(shí)現(xiàn)跨域

package com.mesnac.aop;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class MyCorsFilter implements Filter {
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
    chain.doFilter(req, res);
  }
  public void init(FilterConfig filterConfig) {}
  public void destroy() {}
}

到此這篇關(guān)于Spring實(shí)現(xiàn)跨域的幾種方式小結(jié)的文章就介紹到這了,更多相關(guān)Spring實(shí)現(xiàn)跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringCloud Config配置中心

    詳解SpringCloud Config配置中心

    這篇文章主要介紹了詳解SpringCloud Config配置中心,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-03-03
  • mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解

    mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解

    這篇文章主要介紹了mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java實(shí)現(xiàn)的迷宮游戲

    Java實(shí)現(xiàn)的迷宮游戲

    這篇文章主要介紹了如何用Java實(shí)現(xiàn)一個(gè)迷宮游戲,本倉(cāng)庫(kù)代碼是經(jīng)過eclipse編譯運(yùn)行過的,一般情況下將本倉(cāng)庫(kù)代碼下載下來(lái)之后,使用eclipse編譯直接可以運(yùn)行。
    2021-04-04
  • 精通Java泛型的使用與原理

    精通Java泛型的使用與原理

    針對(duì)利用繼承來(lái)實(shí)現(xiàn)通用程序設(shè)計(jì)所產(chǎn)生的問題,泛型提供了更好的解決方案,本文詳細(xì)的介紹了Java泛型的使用與原理,感興趣的可以了解一下
    2022-03-03
  • elasticsearch集群cluster?discovery可配式模塊示例分析

    elasticsearch集群cluster?discovery可配式模塊示例分析

    這篇文章主要為大家介紹了elasticsearch集群cluster?discovery可配式模塊示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • java實(shí)現(xiàn)給第三方接口推送加密數(shù)據(jù)

    java實(shí)現(xiàn)給第三方接口推送加密數(shù)據(jù)

    這篇文章主要介紹了java實(shí)現(xiàn)給第三方接口推送加密數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Junit單元測(cè)試框架架包的導(dǎo)入全過程

    Junit單元測(cè)試框架架包的導(dǎo)入全過程

    這篇文章主要介紹了Junit單元測(cè)試框架架包的導(dǎo)入全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 一種求正整數(shù)冪的高效算法詳解

    一種求正整數(shù)冪的高效算法詳解

    本篇文章是對(duì)java中一種求正整數(shù)冪的高效算法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java?NIO?中?Selector?解析

    Java?NIO?中?Selector?解析

    這篇文章主要介紹了Java?NIO?中?Selector,Selector即選擇器,選擇器提供選擇執(zhí)行已經(jīng)就緒的任務(wù)的能力即為翻譯為多路復(fù)用,下面文章對(duì)Selector詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • java導(dǎo)出dbf文件生僻漢字處理方式

    java導(dǎo)出dbf文件生僻漢字處理方式

    這篇文章主要介紹了java導(dǎo)出dbf文件生僻漢字處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論