1. 程式人生 > >SpringBoot解決CORS跨域(@CrossOrigin)

SpringBoot解決CORS跨域(@CrossOrigin)

一、關於跨域介紹

在前後分離的架構下,跨域問題難免會遇見比如,站點 http://domain-a.com 的某 HTML 頁面通過 的 src 請求 http://domain-b.com/image.jpg。網路上的許多頁面都會載入來自不同域的CSS樣式表,影象和指令碼等資源。

出於安全原因,瀏覽器限制從指令碼內發起的跨源HTTP請求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 這意味著使用這些API的Web應用程式只能從載入應用程式的同一個域請求HTTP資源,除非使用CORS標頭檔案。

二、Spring Boot跨域(@CrossOrigin)

當然這裡雖然指SpringBoot但是SpringMVC也是一樣的,要求在Spring4.2及以上的版本

1、@CrossOrigin使用場景要求
  • jdk1.8+
  • Spring4.2+
2、@CrossOrigin原始碼解析(翻譯參考網路,文末列出參考地址)
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {

    String[] DEFAULT_ORIGINS = { "*" };

    String[] DEFAULT_ALLOWED_HEADERS = { "*"
}; boolean DEFAULT_ALLOW_CREDENTIALS = true; long DEFAULT_MAX_AGE = 1800; /** * 同origins屬性一樣 */ @AliasFor("origins") String[] value() default {}; /** * 所有支援域的集合,例如"http://domain1.com"。 * <p>這些值都顯示在請求頭中的Access-Control-Allow-Origin * "*"代表所有域的請求都支援 * <p>如果沒有定義,所有請求的域都支援 * @see
#value */
@AliasFor("value") String[] origins() default {}; /** * 允許請求頭重的header,預設都支援 */ String[] allowedHeaders() default {}; /** * 響應頭中允許訪問的header,預設為空 */ String[] exposedHeaders() default {}; /** * 請求支援的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。 * 預設支援RequestMapping中設定的方法 */ RequestMethod[] methods() default {}; /** * 是否允許cookie隨請求傳送,使用時必須指定具體的域 */ String allowCredentials() default ""; /** * 預請求的結果的有效期,預設30分鐘 */ long maxAge() default -1; }
3、@CrossOrigin使用

Spring Boot下的請求處理控制器

package com.example.demo.controller;

import com.example.demo.domain.User;
import com.example.demo.service.IUserFind;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @Title: UserController
 * @ProjectName demo
 * @Description: 請求處理控制器
 * @author 淺然
 * @date 2018/7/2022:18
**/
@RestController
//實現跨域註解
//origin="*"代表所有域名都可訪問
//maxAge飛行前響應的快取持續時間的最大年齡,簡單來說就是Cookie的有效期 單位為秒
//若maxAge是負數,則代表為臨時Cookie,不會被持久化,Cookie資訊儲存在瀏覽器記憶體中,瀏覽器關閉Cookie就消失
@CrossOrigin(origins = "*",maxAge = 3600)
public class UserController {
    @Resource
    private IUserFind userFind;

    @GetMapping("finduser")
    public User finduser(@RequestParam(value="id") Integer id){
        //此處省略相應程式碼
    }
}

後臺返回的資料

這裡寫圖片描述

前端跨域請求

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>demo</title>
        <script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script>
    </head>
    <body>
        <input type="button" value="測試" onclick="ajaxloding()" />
        <div id="usermessage"></div>
        <script>
            var getdata=0;
            function ajaxloding(){
                $.ajax({
                    async:false,
                    type:"get",
                    url:"http://localhost:8080/api/finduser?id=1",
                    contentType: "application/x-www-form-urlencoded",
                    dataType: "json",
                    data: {},
                    success:function(result){
                        getdata=result.name
                    },
                    error: function (errorMsg) {
                        //請求失敗時執行該函式
                        alert("請求資料失敗!");
                    }
                });
                $("#usermessage").text(getdata)
            }
        </script>
    </body>
</html>

這樣就解決了跨域問題,獲取了後臺的資料

這裡寫圖片描述

參考

相關推薦

SpringBoot解決CORS@CrossOrigin

一、關於跨域介紹 在前後分離的架構下,跨域問題難免會遇見比如,站點 http://domain-a.com 的某 HTML 頁面通過 的 src 請求 http://domain-b.com/image.jpg。網路上的許多頁面都會載入來自不同域的CSS樣式

SpringBoot解決cors問題

1.使用@CrossOrigin註解實現 對單個介面配置CORS @CrossOrigin(origins = {"*"}) @PostMapping("/hello") @ResponseBody public ResultVO hello()

cors以及和jsonp的區別

上次我們說到,jsonp只支援get方式跨域,不支援post,是因為底層是使用script標籤去接受請求,jsonp通過給script的src中的url設定回撥函式,傳給服務端後,服務端返回一個回撥函式的呼叫,把資料包在這個回撥函式裡面,然後我們在全域性中

json2----js解決方案

之前轉載過一篇關於跨域的文章,分不清什麼叫主域跨域和二級跨域 下面這篇微博的博主寫的很好,也很清楚。 轉載連結:http://www.cnblogs.com/oneword/archive/2012/12/03/2799443.html 1.什麼是跨域 我們經常會在

ajax

導致 simple version 發生 分享 err web服務 描述 自己的 題綱 關於跨域,有N種類型,本文只專註於ajax請求跨域(,ajax跨域只是屬於瀏覽器”同源策略”中的一部分,其它的還有Cookie跨域iframe跨域,LocalStorage跨域等這裏不做

my

CORS跨域請求 CORS即Cross Origin Resource Sharing 跨域資源共享, 那麼跨域請求還分為兩種,一種叫簡單請求,一種是複雜請求~~ 簡單請求 HTTP方法是下列方法之一   HEAD, GET,POST HTTP頭資訊不超出以下幾種欄位   Accept, Acc

AjaxCROS請求中的Preflighted requests

Ajax跨域(CROS)請求中的Preflighted requests:https://www.aliyun.com/jiaocheng/862989.html 10 分鐘理解跨域請求:https://www.jianshu.com/p/d21b50dc2b25?utm_campaign=maleskin

Spring MVC 解決CORS問題

從4.2之後,Spring Framework可以解決跨域問題,開箱即用,下面是從官方文件總結了3種解決辦法。 利用@CrossOrigin註解,作用在Controller的類或方法上,可以指定origins、allowedHeaders、exposedHeaders、all

java配置springboot配置Cors

springboot配置Cors跨域、java最簡單配置跨域解決方案 aiprose 個人隨筆上線,網址 aiprose.com 點選訪問 現在前後分離已經是很常見的一種開發方式了,所以難免會遇到跨域問題,之前用的比較多的是jsonp(本人表示沒用過),之前

SpringBoot解決ajax問題(轉載)

一、第一種方式:1、編寫一個支援跨域請求的 Configurationimport org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.Co

SpringBoot解決ajax問題

一、第一種方式: 1、編寫一個支援跨域請求的 Configuration import org.springframework.context.annotation.Configuration; import org.springframework.web.servl

canvas 圖片

在專案中,需要生成海報。有動態資訊(微信頭像、微信暱稱、上傳圖片(oss連結)、二維碼)+ 海報背景圖生成一張海報。技術支援:canvas  生成。問題:canvas 圖片跨域。解決過程(填坑歷程):                                   1.從

SpringBoot配置CORS訪問

SpringBoot配置CORS跨域訪問 新增依賴 <!--CORS只需要新增web依賴即可--> <dependency> <groupId>org.springframework.boot</groupId>

Ajaxjsonp 呼叫JAVA後臺

1. JSONP定義     JSONP是英文JSON with Padding的縮寫,是一個非官方的協議。它允許在伺服器端生成script tags返回至客戶端,通過javascript callback的形式來實現站點訪問。 JSONP是一種script tag的注入

Web API中使用CORS解決暫存

content attribute 註冊 serve color def erro 簡單 style Web API中使用Cros解決跨域   如果兩個頁面的協議,端口和域名都相同,則兩個頁面具有相同的源,註:IE不考慮端口,同源策略不會阻止瀏覽器發送請求,但是它會阻止

java服務端解決js的問題 CORS資源共享 的配置

nginx相容跨域上傳 相容情況: 各種新版本的ie10,firefox,opera,safari,chrome以及移動版safari和Android瀏覽器 ie9及一下版本請使用flash方式來相容 通過OPTIONS請求握手一次的方式實現跨根域傳送請求,需要服務端配置

4、CORS請求限制與解決預請求

test.html <script> fetch('http://localhost:8887/', { method: 'PUT', headers: { 'X-Test-Cors': '123' } }) </s

我也說說Nginx解決前端問題,正確的Nginx配置後端Nginx CORS配置、CORS設定,後端允許請求

最近連續兩個朋友問我跨域相關問題,我猜想可能不少朋友也遇到類似問題,我打算寫個部落格聊一下我實際使用的配置, 先說明一下,我並不太瞭解這配置,沒精力去了解太多,但我覺得其中有一些關鍵的小注意點,可能有些初學者不太注意到,導致配置有問題,本文章可能只對新手有點幫助,如果你有好

SpringBoot學習3-SpringBoot新增支援CORS訪問

CORS(Cross-Origin Resource Sharing)”跨域資源共享”,是一個W3C標準,它允許瀏覽器向跨域伺服器傳送Ajax請求,打破了Ajax只能訪問本站內的資源限制。我們在開發中都會遇到前端請求後臺伺服器出現跨域錯誤,下面我就講一下如何讓你

如何解決ajax問題

new encoding const back str ssa -c 一個用戶 追加 由 於此前很少寫前端的代碼(哈哈,不合格的程序員啊),最近項目中用到json作為系統間交互的手段,自然就伴隨著眾多ajax請求,隨之而來的就是要解決 ajax的跨域問題。本篇將講述一個小白