前后端分離之Spring-Boot實現(xiàn)CORS跨域訪問

關(guān)于CORS跨域訪問的解釋,請參考下面的博客:
http://www.ruanyifeng.com/blog/2016/04/cors.html
縮簡稱一張圖如下:

CORS跨域原理

實現(xiàn)跨域共需要四步:

第一步

基本不用做什么扒秸,瀏覽器都實現(xiàn)了跨域訪問自動在Request Headers添加跨域的信息:

Origin: http://localhost:8089
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: GET

第二步

服務(wù)端需要告訴瀏覽器,是否允許這個域名跨域訪問自己,以及自己設(shè)置的跨域信息:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: http://localhost:8089
Access-Control-Max-Age: 86400

體現(xiàn)在代碼里就是:

/**
 * 設(shè)置跨域請求.
 */
@Configuration
public class CorsConfig {

    @Value("${cors.allowed.origin}")
    private String allowedOrigin;

    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.setMaxAge(24 * 3600L); // 預(yù)檢請求的有效期
        if (null != allowedOrigin) {
            String[] origins = allowedOrigin.split(",");
            for (String origin : origins) {
                corsConfiguration.addAllowedOrigin(origin); // 允許跨域請求的源地址
            }
        }
        corsConfiguration.addAllowedHeader("*"); // 支持的所有頭信息字段
        corsConfiguration.addAllowedMethod("*"); // 支持的所有跨域請求的方法
        return corsConfiguration;
    }

    /**
     * Cors過濾器.
     */
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); // 對接口配置跨域設(shè)置
        return new CorsFilter(source);
    }
}

將所有允許跨域訪問的源地址以逗號分隔,配置在application.properties中既可赔嚎。也可以

corsConfiguration.setAllowedOrigin(*) // 允許所有的域名跨域訪問旭贬,但不建議這么設(shè)置

默認(rèn)CORS請求不會攜帶Cookie和Http認(rèn)證信息,但是個別瀏覽器比較頑固锐涯,不理會服務(wù)器的感受,強行發(fā)送Cookie填物,這時Access-Control-Allow-Origin就不能設(shè)為星號纹腌,必須指定明確的霎终、與請求網(wǎng)頁一致的域名。

第三步

第四步

這兩就是正常的請求升薯,只不過瀏覽器每次會有一個Origin頭信息字段莱褒;服務(wù)器的回應(yīng),也都會有一個Access-Control-Allow-Origin頭信息字段涎劈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末广凸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛛枚,更是在濱河造成了極大的恐慌谅海,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦浦,死亡現(xiàn)場離奇詭異扭吁,居然都是意外死亡,警方通過查閱死者的電腦和手機盲镶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門侥袜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溉贿,你說我怎么就攤上這事枫吧。” “怎么了顽照?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵由蘑,是天一觀的道長。 經(jīng)常有香客問我代兵,道長尼酿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任植影,我火速辦了婚禮裳擎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘思币。我一直安慰自己鹿响,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布谷饿。 她就那樣靜靜地躺著惶我,像睡著了一般。 火紅的嫁衣襯著肌膚如雪博投。 梳的紋絲不亂的頭發(fā)上绸贡,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼听怕。 笑死捧挺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尿瞭。 我是一名探鬼主播闽烙,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼声搁!你這毒婦竟也來了黑竞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酥艳,失蹤者是張志新(化名)和其女友劉穎摊溶,沒想到半個月后爬骤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體充石,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年霞玄,在試婚紗的時候發(fā)現(xiàn)自己被綠了骤铃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坷剧,死狀恐怖惰爬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惫企,我是刑警寧澤撕瞧,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站狞尔,受9級特大地震影響丛版,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偏序,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一页畦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧研儒,春花似錦豫缨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冲呢,卻和暖如春舍败,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工瓤湘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓢颅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓弛说,卻偏偏與公主長得像挽懦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子木人,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 序言:跨域資源共享向來都是熱門的需求信柿,使用CORS可以幫助我們快速實現(xiàn)跨域訪問,只需在服務(wù)端進行授權(quán)即可醒第,無需在前...
    一只襪子閱讀 16,495評論 1 38
  • 簡介 由于受瀏覽器的同源策略(same-origin policy)的影響渔嚷, Ajax 請求默認(rèn)只能在同一域名下進...
    叫我峰兄閱讀 487評論 0 2
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本稠曼。它是由瀏覽器的同源策略造成的形病,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,299評論 0 6
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本霞幅。它是由瀏覽器的同源策略造成的漠吻,是瀏覽器對JavaScript實...
    HeroXin閱讀 836評論 0 4
  • ——漫畫—— 三叔說:把小人物寫活,哪怕只有兩行字都不能讓小人物成為npc司恳,可是當(dāng)你這樣做以后你會發(fā)現(xiàn)途乃,作品已經(jīng)不...
    隰桑有妖閱讀 905評論 0 0