精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 SpringBoot 解決跨域訪問的多種實現(xiàn)方式

開發(fā) 項目管理
我們可以在 SpringBoot 項目中有效地解決跨域訪問問題。在實際開發(fā)中,可以根據(jù)項目的具體需求和架構(gòu)選擇合適的方式。

在當今的 Web 應(yīng)用開發(fā)中,跨域訪問問題是一個常見且關(guān)鍵的挑戰(zhàn)。跨域訪問指的是當一個網(wǎng)頁中的腳本(通常是 JavaScript)試圖從一個與當前網(wǎng)頁的源(包括域名、協(xié)議和端口)不同的服務(wù)器獲取資源或進行數(shù)據(jù)交互時所面臨的限制。這種限制是由瀏覽器的同源策略所施加的。

同源策略的核心原則是確保只有來自相同源的網(wǎng)頁能夠相互訪問和交互數(shù)據(jù)。其主要目的是保護用戶的隱私和安全,防止惡意網(wǎng)站通過腳本獲取用戶在其他網(wǎng)站上的敏感信息。

然而,在許多現(xiàn)代的 Web 應(yīng)用架構(gòu)中,如前后端分離的模式,前端頁面可能運行在一個域名(例如:www.frontend.com),而后端服務(wù)則部署在另一個域名(例如:api.backend.com)。這種架構(gòu)上的分離導致了跨域訪問的需求。

當發(fā)生跨域請求時,瀏覽器會在發(fā)送請求前進行預(yù)檢(Preflight)操作。預(yù)檢請求使用 OPTIONS 方法發(fā)送,以獲取服務(wù)器對跨域請求的許可信息,包括允許的請求方法、請求頭和其他相關(guān)權(quán)限。如果服務(wù)器的響應(yīng)不符合瀏覽器的預(yù)期,跨域請求將被阻止。

跨域訪問問題不僅影響到簡單的數(shù)據(jù)獲取,還可能涉及到復雜的操作,如發(fā)送 POST 請求、攜帶自定義請求頭或需要使用 Cookie 進行身份驗證等。解決跨域問題需要綜合考慮安全性、性能和可擴展性等多個方面,以確保在滿足業(yè)務(wù)需求的同時,不會引入新的安全風險。

項目創(chuàng)建及依賴配置(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>cors-solution</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>CORS Solution</name>

    <properties>
        <java.version>19</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

配置文件(application.yml)

server:
  port: 8080
cors:
  allowed-origins: http://your-frontend-domain.com
  allowed-methods: *
  allowed-headers: *
  allow-credentials: true

跨域配置類(方式一:使用全局配置)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 從配置文件中讀取允許的源
        config.setAllowedOrigins(Arrays.asList(
                Objects.requireNonNull(this.getProperties().get("cors.allowed-origins"))
                      .toString().split(",")));
        // 從配置文件中讀取允許的方法
        config.setAllowedMethods(Arrays.asList(
                Objects.requireNonNull(this.getProperties().get("cors.allowed-methods"))
                      .toString().split(",")));
        // 從配置文件中讀取允許的請求頭
        config.setAllowedHeaders(Arrays.asList(
                Objects.requireNonNull(this.getProperties().get("cors.allowed-headers"))
                      .toString().split(",")));
        // 從配置文件中讀取是否允許攜帶憑證
        config.setAllowCredentials(Boolean.parseBoolean(
                Objects.requireNonNull(this.getProperties().get("cors.allow-credentials"))
                      .toString()));

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    }

    private Properties getProperties() {
        return new PropertiesLoaderUtils().loadProperties(new ClassPathResource("application.yml"));
    }
}

控制器類(提供測試接口)

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

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        return "跨域測試成功!";
    }
}

前端頁面(index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跨域測試</title>
</head>
<body>
    <h1>跨域測試頁面</h1>
    <button onclick="fetchData()">獲取數(shù)據(jù)</button>
    <script>
        function fetchData() {
            fetch('http://your-backend-domain.com/test')
           .then(response => response.text())
           .then(data => {
                    console.log(data);
                })
           .catch(error => console.error('錯誤:', error));
        }
    </script>
</body>
</html>

方式二:在控制器方法上使用注解

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

@RestController
public class TestController {

    @CrossOrigin(origins = "http://your-frontend-domain.com")
    @GetMapping("/test")
    public String test() {
        return "跨域測試成功!";
    }
}

其他方法

除了上述兩種常見的方法外,還可以通過配置 WebMvcConfigurer 來解決跨域問題。

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 CorsConfigurer implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 從配置文件中讀取相關(guān)屬性
        registry.addMapping("/**")
              .allowedOrigins(Arrays.asList(
                        Objects.requireNonNull(this.getProperties().get("cors.allowed-origins"))
                              .toString().split(",")))
              .allowedMethods(Arrays.asList(
                        Objects.requireNonNull(this.getProperties().get("cors.allowed-methods"))
                              .toString().split(",")))
              .allowedHeaders(Arrays.asList(
                        Objects.requireNonNull(this.getProperties().get("cors.allowed-headers"))
                              .toString().split(",")))
              .allowCredentials(Boolean.parseBoolean(
                        Objects.requireNonNull(this.getProperties().get("cors.allow-credentials"))
                              .toString()));
    }

    private Properties getProperties() {
        return new PropertiesLoaderUtils().loadProperties(new ClassPathResource("application.yml"));
    }
}

總結(jié)

通過以上多種方式,我們可以在 SpringBoot 項目中有效地解決跨域訪問問題。在實際開發(fā)中,可以根據(jù)項目的具體需求和架構(gòu)選擇合適的方式。全局配置適用于整個應(yīng)用的所有接口,在控制器方法上使用注解則可以更靈活地控制特定接口的跨域策略,而通過配置 WebMvcConfigurer 也是一種可行的選擇。

責任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2019-11-11 17:34:16

前端開發(fā)技術(shù)

2009-05-21 14:47:38

WEB開發(fā)JsonAjax

2024-08-28 08:45:22

2024-10-29 16:41:24

SpringBoot跨域Java

2010-10-08 10:35:21

2024-12-02 14:30:20

2010-02-24 10:55:01

WCF跨域訪問

2010-07-30 12:40:00

Flex跨域訪問

2018-01-18 14:50:56

Nginx實現(xiàn)CDSW

2019-01-23 08:48:50

跨域協(xié)議端口

2021-04-27 15:20:41

人工智能機器學習技術(shù)

2018-11-26 14:52:12

Web前端跨域

2024-05-20 09:28:44

Spring客戶端瀏覽器

2021-06-15 07:32:59

Cookie和Sess實現(xiàn)跨域

2017-08-20 12:49:59

瀏覽器跨域服務(wù)器

2012-06-05 10:15:43

jQuery

2009-12-22 11:21:43

WCF跨域訪問

2023-05-06 15:32:04

2009-02-18 09:30:10

AJAX跨域XML

2024-01-25 11:04:51

跨域問題反向代理層網(wǎng)關(guān)層
點贊
收藏

51CTO技術(shù)棧公眾號

成人免费va视频| 国精一区二区| 福利微拍一区二区| 日本在线一区| 国产精品国产精品国产专区| 精品91在线| 亚洲性日韩精品一区二区| 在线免费看污网站| 51漫画成人app入口| 久久久亚洲综合| 91在线视频导航| 亚洲男人的天堂在线视频| 日韩久久久久| 亚洲国产精品久久91精品| 天天操天天爽天天射| 毛片大全在线观看| 亚洲国产精品t66y| 国产精华一区二区三区| 最新在线中文字幕| 亚洲欧洲另类| 久久久精品2019中文字幕神马| 国产激情视频网站| 最新亚洲国产| 色婷婷av一区二区三区之一色屋| 男人天堂成人网| av在线电影播放| 99久久婷婷国产| 91最新国产视频| 91丨九色丨海角社区| 亚洲黄页一区| 欧美另类极品videosbest最新版本| 黄色正能量网站| 超碰在线一区| 日韩欧美一级精品久久| 91小视频网站| 香蕉成人av| 香港成人在线视频| 97在线免费视频观看| 1769在线观看| 久久精品欧美日韩| 久久久福利视频| 黄色av网站免费在线观看| 国产一区亚洲一区| 国产欧美日韩精品专区| 久久精品五月天| 免费一级欧美片在线播放| 欧美激情欧美狂野欧美精品| 国产午夜手机精彩视频| 日韩av二区| 亚洲性生活视频在线观看| 国产三级视频网站| 欧美一级一片| 日韩精品免费视频| 国产麻豆剧传媒精品国产av| 荡女精品导航| 精品国产网站在线观看| 国产艳妇疯狂做爰视频| 特级毛片www| 天天操天天干天天操天天干| 国产在线88av| 午夜成人免费视频| 99在线免费视频观看| 丁香花在线影院| 亚洲韩国一区二区三区| 日韩精品一区二区免费| 欧美极品少妇videossex| 亚洲精品久久久蜜桃| 男人草女人视频| 亚洲丝袜精品| 亚洲成a人v欧美综合天堂| r级无码视频在线观看| 咪咪网在线视频| 色婷婷综合视频在线观看| 亚洲 中文字幕 日韩 无码| 欧美韩国亚洲| 欧美精品一级二级三级| 日本少妇一区二区三区| 国产精品成人自拍| 国产视频亚洲视频| 亚洲天堂最新地址| 一本一道久久a久久精品蜜桃| 久久国产精品久久国产精品| 国产中文字字幕乱码无限| 亚洲日本视频| 国产精品久久久av| 97在线公开视频| 成人精品小蝌蚪| 欧洲精品码一区二区三区免费看| a天堂中文在线88| 亚洲美女一区二区三区| 久久久久久人妻一区二区三区| 亚洲最大成人| 欧美电影一区二区三区| 污网站免费观看| 欧美色婷婷久久99精品红桃| 欧美xxxx做受欧美| 99超碰在线观看| 国产揄拍国内精品对白| 精品国产一区二区三区麻豆小说| 国产高清在线| 亚洲最色的网站| 九热视频在线观看| 亚洲午夜精品| 中文字幕日韩专区| 国产欧美日韩另类| 精品一区二区在线播放| 精选一区二区三区四区五区| 免费大片在线观看www| 亚洲不卡一区二区三区| 日本中文字幕精品—区二区| 林ゆな中文字幕一区二区| 日韩有码在线视频| 欧美一二三区视频| 国产美女精品人人做人人爽| 色婷婷精品国产一区二区三区| 日本h片在线| 欧美午夜精品久久久久久超碰| 日本少妇一区二区三区| 色乱码一区二区三区网站| 992tv成人免费视频| 99久久免费国产精精品| 欧美激情一区在线观看| 欧美日韩黄色一级片| 欧美中文高清| 最近2019好看的中文字幕免费| 欧美另类一区二区| 国产福利一区二区三区| 伊人久久青草| 日本精品另类| 亚洲人成电影在线播放| 国产一级视频在线观看| 国产美女在线精品| 亚洲欧洲久久| 少妇精品视频一区二区免费看| 亚洲激情视频在线观看| 久久精品视频久久| 国产成人鲁色资源国产91色综| 一区二区三视频| 无人区在线高清完整免费版 一区二| 精品sm在线观看| 欧美日韩大片在线观看| 激情综合网激情| 亚洲国产日韩欧美| 国产福利亚洲| 中文字幕日韩在线观看| 真实的国产乱xxxx在线91| 国产亚洲视频系列| 国产成人亚洲精品无码h在线| 久久亚洲道色| 97视频在线免费观看| 三级小视频在线观看| 亚洲成人自拍偷拍| 日韩av无码一区二区三区不卡| 一区在线视频观看| 国产精品一级久久久| 免费在线观看av电影| 精品久久人人做人人爽| 国产亚洲精品av| jizz一区二区| 欧美视频第一区| 国产日韩欧美一区二区三区| 国产精品va在线播放| 福利在线午夜| 91麻豆精品91久久久久同性| 欧美做爰爽爽爽爽爽爽| 大桥未久av一区二区三区中文| 久久99久久久久久| 老司机精品视频在线播放| 欧美在线视频一区二区| 第一页在线观看| 欧美久久久久久久久| 欧美精品久久久久性色| 不卡一卡二卡三乱码免费网站| 大陆极品少妇内射aaaaa| 在线成人动漫av| 国产男人精品视频| 50度灰在线| 日韩精品免费在线观看| 国语对白做受69按摩| 亚洲图片你懂的| 亚洲色偷偷色噜噜狠狠99网| 日精品一区二区| eeuss中文| 久久动漫网址| 国产精品日本精品| 午夜小视频福利在线观看| 亚洲国产精品大全| 天天综合久久综合| 亚洲综合视频在线| 夫妇交换中文字幕| 大白屁股一区二区视频| 激情五月婷婷久久| 欧美精品大片| 日韩三级电影| 亚洲成人偷拍| 国产成人aa精品一区在线播放| 成人在线观看免费网站| 精品小视频在线| 国产手机精品视频| 日韩欧美国产中文字幕| 国产精品白丝喷水在线观看| 91色视频在线| av地址在线观看| 日本伊人色综合网| 欧美成人精品免费| 国产精品成人a在线观看| 激情五月综合色婷婷一区二区| 九七电影院97理论片久久tvb| 久久久久久久久久久久av| 一区二区三区视频网站| 日韩av在线精品| 国产99久一区二区三区a片 | 欧美一区二区三区四区五区 | 91福利精品视频| 免费网站看av| 国产精品灌醉下药二区| 无码人妻aⅴ一区二区三区 | 色综合久久久久综合| 中文字幕影音先锋| 国产精品视频一区二区三区不卡| 理论片大全免费理伦片| 国产自产2019最新不卡| 国产精品人人爽人人爽| 国产亚洲一级| 亚洲精品无码国产| 91精品国产视频| 色综合视频二区偷拍在线| 成人免费视频在线观看超级碰| 人妻视频一区二区三区| 宅男在线国产精品| 黄色大全在线观看| 高跟丝袜一区二区三区| 久久婷婷国产麻豆91| 亚洲日本va午夜在线影院| 免费网站在线高清观看| 26uuu精品一区二区三区四区在线| 丰满人妻一区二区三区大胸| 久久精品99久久久| 爱情岛论坛亚洲首页入口章节| 小嫩嫩精品导航| 欧美一区二区三区爽大粗免费| 国产精品vip| 天堂а√在线中文在线| 综合一区av| 中文字幕一区二区三区5566| 婷婷综合久久| 大桥未久一区二区| 999久久久精品国产| 亚洲精品日韩成人| 久久国产综合| 一区二区三区免费看| 久久免费大视频| 亚洲区一区二区三区| 日韩精品首页| 影音先锋在线亚洲| 久久精品亚洲人成影院| 国产一二三四五| 91精品秘密在线观看| 欧美做受777cos| 亚洲小说区图片区| 国产96在线 | 亚洲| 亚洲综合三区| 天天影视综合色| 久久激情综合网| 一级片免费在线观看视频| 国产精品99久久久久久久vr| 中文字幕av一区二区三区人妻少妇| 国产成人免费视频精品含羞草妖精| 国产精久久久久| 99精品国产一区二区三区不卡| www.久久国产| 国产精品三级电影| 欧美日韩成人免费观看| 大桥未久av一区二区三区| 天天射天天干天天| 制服.丝袜.亚洲.中文.综合| 亚洲AV无码精品色毛片浪潮| 亚洲精品福利资源站| 黄色片视频在线观看| 日韩在线观看视频免费| 国产又色又爽又黄刺激在线视频| 9.1国产丝袜在线观看| 中文字幕av一区二区三区佐山爱| 国产精品视频一区国模私拍| 久久综合偷偷噜噜噜色| 精选一区二区三区四区五区| 欧美一区二区三| 久久这里只有精品18| 日韩国产在线观看| 国产精品19p| 久久久99精品免费观看不卡| 久久国产精品国语对白| 欧美午夜无遮挡| 97人妻精品一区二区三区动漫| 精品国产伦一区二区三区观看方式| 日本韩国精品一区二区| 日韩亚洲欧美中文在线| 黄页网站在线| 国产精品男人爽免费视频1| 日韩在线亚洲| 欧美在线播放一区二区| 你懂的视频一区二区| www.四虎成人| 国产a视频精品免费观看| 免费视频91蜜桃| 午夜精品久久久久久久蜜桃app| 中国a一片一级一片| 亚洲国产欧美日韩精品| 福利在线视频网站| 日韩av片免费在线观看| 中文字幕一区二区三区四区久久 | 成人羞羞网站入口免费| 大胆欧美熟妇xx| 久久精品999| 久久只有这里有精品| 亚洲制服丝袜av| 一区二区三区精| 亚洲人永久免费| 国产在线观看www| 99三级在线| 国产精品久久观看| 无码无遮挡又大又爽又黄的视频| 国产二区国产一区在线观看| 青青操在线播放| 在线视频欧美精品| 亚洲av片一区二区三区| 久久久久久久色| 亚洲1区在线观看| 一区二区三区四区国产| 青青草91视频| 欧美三级视频网站| 日本久久精品电影| 免费在线一级视频| 97av在线播放| 女同另类激情重口| www.好吊操| 国产成人亚洲综合a∨婷婷| 中文乱码字幕高清一区二区| 欧美三级电影网| 国产视频在线看| 国产成人精品电影| 国精一区二区| 在线观看av日韩| 国产精品视频线看| 一级片免费观看视频| www.久久久久| 国产高清视频一区二区| 黄色www在线观看| 国产一区免费电影| 日本妇女毛茸茸| 欧美一二三四区在线| 在线观看中文字幕的网站| 99精品国产一区二区| 亚洲无吗在线| 中文字幕免费在线播放| 欧美午夜女人视频在线| 国外av在线| 国产精品网址在线| 天天做天天爱天天综合网| 国产又粗又猛大又黄又爽| 一区二区三区免费| 日本高清视频在线| 69视频在线播放| 国产成人黄色| 奇米影视四色在线| 一区二区三区美女视频| 日本高清视频免费看| 国产成人亚洲综合91精品| 激情五月综合| 精品亚洲视频在线| 亚洲一区国产视频| 日本a一级在线免费播放| 国产精品天天狠天天看| 亚洲成av人电影| 亚洲国产精品无码久久久久高潮| 日韩欧美中文第一页| 一区二区高清不卡| 岛国视频一区免费观看| 国产日韩欧美| 美国精品一区二区| 欧美电影免费观看完整版| 天堂av在线网| 伊人久久婷婷色综合98网| 成人国产亚洲欧美成人综合网| 中文字幕一区在线播放| 美女福利精品视频| 欧美黄色录像| 久久久精品高清| 精品久久久久久久久久久久| 欧美一区二区三区| 国产精品国产一区二区| 日本不卡高清视频| 五月天丁香激情| 国产亚洲成精品久久| av综合网址| 天天干天天草天天| 天天影视涩香欲综合网| 欧美黄色激情| 免费久久99精品国产自| 国产成a人亚洲|