中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 2.X怎么解決跨域問題

發布時間:2021-07-28 14:14:54 來源:億速云 閱讀:199 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Spring Boot 2.X怎么解決跨域問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、什么是源和跨域

源(origin)就是協議、域名和端口號。

URL由協議、域名、端口和路徑組成,如果兩個URL的協議、域名和端口全部相同,則表示他們同源。否則,只要協議、域名、端口有任何一個不同,就是跨域。

對https://www.baidu.com/index.html進行跨域比較:

URL是否跨域原因
https://www.baidu.com/more/index.html不跨域三要素相同
https://map.baidu.com/跨域域名不同
http://www.baidu.com/index.html跨域協議不同
https://www.baidu.com:81/index.html跨域端口號不同

隨著前后端分離開發的越來越普及,會經常遇到跨域的問題,當我們在瀏覽器中看到這樣的錯誤時,就需要意識到遇到了跨域:

Spring Boot 2.X怎么解決跨域問題

二、什么是同源策略?

同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。

同源策略又分為以下兩種:

  • DOM同源策略:禁止對不同源頁面DOM 進行操作。這里主要場景是iframe跨域的情況,不同域名的iframe是限制互相訪問的。

  • XMLHttpRequest同源策略:禁止使用XHR對象向不同源的服務器地址發起HTTP請求。

三、Spring Boot跨域解決方案

本例使用Spring Boot 2.1.2.RELEASE演示,分別用8080和8081端口啟動,部分代碼如下:

跨域頁面:testOtherDomain.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>不同域名-Java碎碎念</title>
</head>
<body>
<button id="b1">點我測試</button>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
 $("#b1").click(function () {
  $.ajax({
   url: "http://localhost:8081/hello",
   type: "post",
   success:function (res) {
    console.log(res);
   }
  })
 });
</script>
</body>
</html>

接口類:HelloController

package com.example.helloSpringBoot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
 @RequestMapping("/hello")
 public String HelloSpring (){
  return "hello Java碎碎念!";
 }
}

未解決跨域前運行截圖:

Spring Boot 2.X怎么解決跨域問題

在Spring Boot 2.X應用程序中可以使用注解@CrossOrigin,也可以通過使用WebMvcConfigurer對象來定義全局CORS配置。

1、@CrossOrigin注解示例代碼

package com.example.helloSpringBoot.controller;

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

 @CrossOrigin
 @RequestMapping("/hello")
 public String HelloSpring (){
  return "hello Java碎碎念!";
 }
}

2. WebMvcConfigurer對象示例代碼

package com.example.helloSpringBoot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyConfiguration {
 @Bean
 public WebMvcConfigurer corsConfigurer() {
  return new WebMvcConfigurer() {
   @Override
   public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/*")
       .allowedOrigins("*")
       .allowCredentials(true)
       .allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
       .maxAge(3600);
   }
  };
 }
}

按照上面兩種方式的一種配置完成后,即可實現對跨域的支持,運行成功截圖如下:

Spring Boot 2.X怎么解決跨域問題 

關于“Spring Boot 2.X怎么解決跨域問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红河县| 依兰县| 屏山县| 长宁区| 花莲市| 揭阳市| 邯郸县| 凤庆县| 和顺县| 封开县| 安西县| 宜兰县| 井陉县| 织金县| 扎赉特旗| 永顺县| 永兴县| 安仁县| 晋城| 麦盖提县| 吴桥县| 新和县| 康保县| 阿坝| 余姚市| 海安县| 吐鲁番市| 河间市| 蓬安县| 和硕县| 三门峡市| 曲沃县| 喀什市| 肇庆市| 内丘县| 策勒县| 邹平县| 搜索| 通城县| 五家渠市| 滁州市|