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設定回撥函式,傳給服務端後,服務端返回一個回撥函式的呼叫,把資料包在這個回撥函式裡面,然後我們在全域性中
json跨域(2)----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
Ajax跨域(CROS)請求中的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>
Ajax跨域(jsonp) 呼叫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的跨域問題。本篇將講述一個小白