精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

日韩偷拍自拍| 中文字幕av播放| 我爱我色成人网| 欧美韩国日本不卡| 91视频免费进入| www.av麻豆| 日韩av自拍| 91精品国产乱码久久久久久 | 日韩av一卡二卡| 超碰网在线观看| 欧洲日本在线| av高清不卡在线| 国产日韩欧美在线| 亚洲欧美在线观看视频| 日韩av大片| 亚洲第一偷拍网| 手机在线成人免费视频| 国产又色又爽又黄刺激在线视频| 久久亚洲精品国产精品紫薇| 91社区国产高清| 亚洲第一在线播放| 欧美一区二区三区久久精品| 亚洲人av在线影院| 欧美xxxxx少妇| 精品久久久网| 日韩欧美在线视频免费观看| 久久99国产精品一区| 日本韩国精品一区二区| 国产精品一二三区| 国产精品久久精品| 丁香六月婷婷综合| 亚洲黄色av| 欧美成人高清视频| 免费一级特黄3大片视频| 日韩超碰人人爽人人做人人添| 欧美精品自拍偷拍动漫精品| 可以在线看的黄色网址| 嗯~啊~轻一点视频日本在线观看| 国产精品电影院| 久久婷婷综合激情| 精品综合久久久久久97| 在线观看日本中文字幕| 国产图片一区| 日韩精品中文字幕一区二区三区| jizz欧美性11| 韩日精品一区| 91国产丝袜在线播放| 5月婷婷6月丁香| 俺来也官网欧美久久精品| 亚洲色图视频网站| 中文字幕在线亚洲精品| 日本视频在线| 国产精品久久一卡二卡| 手机成人在线| 国产视频三级在线观看播放| 久久老女人爱爱| 免费国产一区二区| 欧美日本韩国一区二区| 久久影院午夜片一区| 国产亲近乱来精品视频| 久久久久久久色| 久久久精品视频免费观看| 先锋资源久久| 欧美大肥婆大肥bbbbb| 欧美在线视频第一页| 亚洲午夜精品一区 二区 三区| 久久精品国产亚洲7777| 亚洲综合久久av一区二区三区| 日韩电影在线视频| 久久精品久久久久电影| 中文字幕在线观看2018| 欧美国产三级| 国内久久久精品| 91国产丝袜播放在线| 亚洲少妇自拍| 国产成人精品视频在线观看| 无码人妻精品一区二区50| 日韩高清在线不卡| 成人免费视频在线观看超级碰| 国产乱叫456在线| 国产福利91精品| 国产日韩一区二区三区| 毛片在线播放网站| 国产精品高潮呻吟| 日韩成人手机在线| 性欧美xxx69hd高清| 亚洲s色大片| av资源网一区| 日韩av大全| 国产区在线看| 精品久久久视频| 亚洲综合在线网站| 91视频亚洲| 亚洲精品国产福利| 日韩av片在线免费观看| 狠狠爱综合网| 国产精品扒开腿做爽爽爽男男 | 欧美日韩国产在线观看| 一个人看的视频www| 欧美性生活一级片| 色阁综合伊人av| 九热这里只有精品| 日本aⅴ免费视频一区二区三区 | 国产精品久久久久久久久久久免费看 | 天天做天天摸天天爽国产一区| 欧美视频中文字幕| 91大学生片黄在线观看| 亚洲精品日产| 日韩亚洲欧美成人一区| 亚洲成人日韩在线| 自由日本语亚洲人高潮| 欧美中文字幕在线| 亚洲av永久无码国产精品久久| 久久久久久**毛片大全| 日本一二三区视频在线| 日韩大片欧美大片| 欧美一级日韩一级| 亚洲无人区码一码二码三码的含义| 欧美欧美黄在线二区| 色综合天天综合网国产成人网| 日韩在线 中文字幕| 高清不卡一二三区| 伊人久久大香线蕉午夜av| 看黄在线观看| 精品久久久三级丝袜| 5566中文字幕| 日本aⅴ亚洲精品中文乱码| 91一区二区三区在线播放| 国产欧美日韩专区发布| 亚洲色图欧美视频| 亚洲精品大片www| 三区视频在线观看| 久久综合av| 国产精品美女主播| 青梅竹马是消防员在线| 亚洲国产精品久久久男人的天堂| 亚洲一二三不卡| 97久久夜色精品国产| 国产精品高清网站| 黄色小视频在线免费观看| 福利视频第一区| 久久久久久久人妻无码中文字幕爆| 欧美在线不卡| 91久久精品国产91久久性色tv| 免费在线观看黄色| 欧美精品黑人性xxxx| 大地资源高清在线视频观看| 免费成人在线观看视频| 亚洲国产成人不卡| 日本欧美不卡| 在线观看亚洲视频| 91禁在线观看| 亚洲九九爱视频| 中文字幕永久免费| 亚洲精品女人| 久久一区二区精品| 美女日韩欧美| 中文字幕亚洲欧美在线| 中文字幕日本视频| ...av二区三区久久精品| 涩涩网站在线看| 在线成人激情| 国产一区二区剧情av在线| 国产精品私拍pans大尺度在线 | 欧美日韩mp4| 欧美爱爱免费视频| 久久99国内精品| 亚洲一区美女| 日韩三级成人| 色悠悠久久88| 国产黄色小视频在线观看| 亚洲另类在线一区| 欧美图片自拍偷拍| 在线欧美日韩| 欧美精品一区二区三区在线看午夜| 爱福利在线视频| 亚洲丁香婷深爱综合| 国产午夜精品无码一区二区| 精品影视av免费| a级黄色片免费| 91精品久久久久久综合五月天 | 极品美妇后花庭翘臀娇吟小说| 麻豆成人综合网| 久久久久久久免费视频| 另类图片第一页| 国产精品91在线观看| 一级日本在线| 精品日韩欧美在线| 国产无码精品视频| 国产日韩欧美精品一区| www.com污| a视频在线观看免费| 亚洲美女一区| 欧美一级二级三级九九九| 欧美影视资讯| 伦伦影院午夜日韩欧美限制| 99久久久国产精品无码网爆| 一区2区3区在线看| 影音先锋人妻啪啪av资源网站| 美女国产一区| 亚洲制服欧美久久| 国产精品网站在线看| 国产精品视频男人的天堂| www视频在线看| 日韩高清免费在线| 中文字幕在线观看欧美| 亚洲日本va在线观看| 成年人在线观看av| 狠狠网亚洲精品| 欧美一区二区中文字幕| 久久国产精品亚洲人一区二区三区 | 国产精品大全| 欧美va在线| 国产极品一区| 中文字幕在线看视频国产欧美| 一级日韩一级欧美| 欧美性xxxxx极品| 欧美日韩午夜视频| 久久综合99re88久久爱| 国产精品久久久久久9999| 另类天堂av| 99re6这里有精品热视频| 国产成人调教视频在线观看 | 欧美日韩三级在线观看| 久久亚洲综合色一区二区三区| 亚洲成年人在线观看| 日韩电影在线免费观看| www.亚洲成人网| 青青草91久久久久久久久| 亚洲自拍另类欧美丝袜| 久久亚洲精品中文字幕| 日本中文字幕成人| jizz一区二区三区| 久久国产一区二区三区| 成人资源www网在线最新版| 亚洲成人精品在线| 91久久精品国产91性色69| 色婷婷精品久久二区二区蜜臂av | 九九久久久久久| 视频在线观看一区| 99视频在线免费播放| 国产精品久久久乱弄| 亚洲精品一区二区三| 亚洲动漫在线观看| 国产精品青青草| 国产在线视频欧美一区| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美福利一区二区| 亚洲av无码不卡| 精品久久久久久久久国产字幕 | 亚洲精选免费视频| www深夜成人a√在线| 国产精品午夜在线| 国产综合精品久久久久成人av| 91一区在线观看| 国产艳妇疯狂做爰视频| 成人av免费在线观看| 国内精品免费视频| 丁香天五香天堂综合| www.五月天色| 国产不卡在线播放| 日本中文字幕精品| 大陆成人av片| 波多野结衣电影免费观看| 成人高清免费观看| 亚洲欧美综合视频| av网站免费线看精品| www.啪啪.com| 久久精品视频免费| 国产jjizz一区二区三区视频| 久久嫩草精品久久久精品一| 免费观看av网站| 国产精品久久久久aaaa樱花 | 麻豆视频一区| 精品免费一区二区三区蜜桃| 欧美a一欧美| 欧美三级电影在线播放| 国产一区99| 婷婷五月色综合| 天天揉久久久久亚洲精品| 99久久99久久精品| 欧美特黄一区| 国内自拍在线观看| 久久婷婷麻豆| 中文字幕第三区| 成人精品一区二区三区中文字幕| 成人做爰www看视频软件| av成人免费在线| 欧美做受高潮6| 18成人在线视频| 国产黄色片视频| 色系网站成人免费| 国产原创中文av| 日韩免费观看高清完整版| 欧美一级视频免费| 亚洲欧美国产va在线影院| 一级毛片视频在线| 激情五月婷婷综合| 日本不卡一区二区三区在线观看| 精品av一区二区| 欧美性受黑人性爽| 香蕉成人久久| 成人不卡免费视频| 95精品视频在线| 女人又爽又黄免费女仆| 亚洲愉拍自拍另类高清精品| 久久一区二区三区视频| 欧美日高清视频| 亚洲欧美国产高清va在线播放| 国产亚洲视频在线观看| 精品麻豆一区二区三区 | 免费黄色激情视频| 亚洲午夜一区二区三区| 国产精品免费精品一区| 欧美一区二区视频观看视频| 视频二区在线观看| 精品国模在线视频| 精品成人av| 国产精品一区二区三区精品| 日韩久久精品| 欧美a在线视频| 成人av资源站| 在线观看黄网址| 欧美性感美女h网站在线观看免费| 国产理论视频在线观看| 亚洲人成在线观看| 免费污视频在线观看| 国产精品久久9| 九九热爱视频精品视频| 免费看日b视频| 美女视频免费一区| 18禁裸乳无遮挡啪啪无码免费| 亚洲午夜一区二区| 国产农村老头老太视频| 亚洲视频在线免费看| 色爱综合区网| 97se在线视频| 91久久夜色精品国产按摩| 欧美三级一级片| 国产一区二区精品久久| 国产99在线 | 亚洲| 精品久久久久久久久久久久久久 | 免费在线观看视频一区| 中文字幕人妻无码系列第三区| 国产精品成人免费在线| 99久久久无码国产精品免费蜜柚| 亚洲国产成人爱av在线播放| 午夜看片在线免费| 国产精品成人v| 亚洲婷婷丁香| 9久久9毛片又大又硬又粗| www.爱久久.com| 久久久精品视频免费| 日韩你懂的在线观看| 污片视频在线免费观看| 91午夜在线播放| 99热在线成人| 最新国产黄色网址| 亚洲视频网在线直播| 国产一区二区三区三州| 在线观看日韩视频| 一区二区三区短视频| 日本一区免费| 秋霞电影一区二区| 国产精品情侣呻吟对白视频| 欧美一a一片一级一片| av网站大全在线观看| 国产精品v片在线观看不卡| 日韩电影免费在线观看| 一区二区三区韩国| 中文字幕一区日韩精品欧美| 亚洲图片视频小说| 欧美麻豆久久久久久中文| 日本99精品| 欧美一级视频在线播放| 91小视频免费观看| 久久久免费高清视频| 国产一区二区三区四区福利| 在线女人免费视频| 中文字幕日韩精品久久| 国产一区二区三区四区五区入口| 国产高潮流白浆| 亚洲第一中文字幕| 亚洲女同志freevdieo| 日本视频一区二区不卡| 国产精品综合网| 久久精品国产亚洲AV无码麻豆 | 欧美r级电影| 两女双腿交缠激烈磨豆腐| 亚洲黄色小视频| 天天干视频在线| 国产精品欧美久久久| 亚洲人亚洲人色久| www.51色.com| 午夜电影一区二区三区| 大片免费播放在线视频| 99影视tv| 日韩国产精品久久| 国产这里有精品| 亚洲色图25p|