成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot 如何解決跨域問題?

開發
本文我們詳細探討了 Spring Boot解決跨域問題的三種方法,包括全局配置、使用注解和自定義過濾器。

跨域問題是Web開發中常見的問題之一,特別是在前后端分離的項目中。Spring Boot作為一個流行的Java后端框架,提供了多種方式來解決跨域問題。本文將深入探討Spring Boot如何解決跨域問題,包括原理分析、代碼實現和示例展示。

一、跨域問題

1.什么是跨域

跨域是指瀏覽器出于安全考慮,對來自不同域名、協議或端口的請求進行限制。通常,當一個網頁發起的請求目標是與其來源不同的域時,就會發生跨域問題。瀏覽器采用同源策略(Same-Origin Policy)來阻止某些不安全的請求。

2.同源策略

同源策略是瀏覽器的一個安全特性,用于防止惡意網站讀取另一個網站的敏感信息。只有當協議、域名和端口號都相同時,瀏覽器才允許請求通過。

3.CORS

CORS,全稱 Cross-Origin Resource Sharing 翻譯為跨域資源共享,它使用額外的 HTTP頭來告訴瀏覽器允許 Web應用從不同的域進行請求。CORS是 W3C的一個標準,允許服務器聲明哪些源站點可以訪問它的資源。

二、Spring Boot如何解決跨域?

整理來說,Spring Boot解決跨域問題的方法有三種:

  • 全局配置CORS
  • 使用@CrossOrigin注解
  • 自定義過濾器

1.全局配置CORS

在Spring Boot中,可以通過實現WebMvcConfigurer接口來全局配置CORS。

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

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

代碼分析:

  • addMapping("/**"): 允許所有路徑的請求。
  • allowedOrigins("http://example.com"): 允許的跨域請求來源。
  • allowedMethods("GET", "POST", "PUT", "DELETE"): 允許的HTTP方法。
  • allowedHeaders("*"): 允許的請求頭。
  • allowCredentials(true): 是否允許發送Cookie。
  • maxAge(3600): 預檢請求的緩存時間。

2.使用@CrossOrigin注解

Spring提供了@CrossOrigin注解用于簡化跨域配置。可以在控制器類或方法級別使用。

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

@RestController
public class MyController {

    @CrossOrigin(origins = "http://example.com")
    @GetMapping("/greet")
    public String greet() {
        return "Hello World";
    }
}

代碼分析:

  • @CrossOrigin(origins = "http://example.com"): 指定允許跨域的來源。
  • 可以在類級別使用@CrossOrigin,應用于該類的所有請求方法。

3.自定義過濾器

通過自定義過濾器,可以更靈活地處理跨域請求。

如下示例代碼,自定義過濾器 CorsFilter 實現 Filter,從而允許https://yuanjava.com 作為跨域的來源。

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import org.springframework.stereotype.Component;

@Component
public class CorsFilter implements CorsFilter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Access-Control-Allow-Origin", "https://yuanjava.com");
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        res.setHeader("Access-Control-Allow-Headers", "Content-Type");
        res.setHeader("Access-Control-Allow-Credentials", "true");
        
        if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) {
            res.setStatus(HttpServletResponse.SC_OK);
            return;
        }

        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

代碼分析:

  • setHeader("Access-Control-Allow-Origin", "https://yuanjava.com"): 設置允許跨域的來源。
  • setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"): 設置允許的HTTP方法。
  • setHeader("Access-Control-Allow-Headers", "Content-Type"): 設置允許的請求頭。
  • setHeader("Access-Control-Allow-Credentials", "true"): 允許發送Cookie。

對于OPTIONS預檢請求,直接返回狀態碼200。

三、示例展示

假設我們有一個簡單的 Spring Boot應用程序,它提供一個 RESTful API。我們希望允許來自"https://yuanjava.com"的跨域請求。

1.項目結構

src
└── main
    ├── java
    │   └── com
    │       └── yuanjava
    │           ├── CorsFilter.java
    │           ├── MyController.java
    │           └── WebConfig.java
    └── resources
        └── application.properties

2.代碼實現

  • WebConfig.java: 全局配置CORS
  • MyController.java: 使用@CrossOrigin注解
  • CorsFilter.java: 自定義過濾器

3.測試跨域請求

可以使用Postman或編寫簡單的JavaScript代碼來測試跨域請求。

fetch('http://localhost:8080/greet', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    },
    credentials: 'include'
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

4.驗證

  • 啟動Spring Boot應用程序。
  • 通過瀏覽器或Postman測試API。
  • 確認跨域請求成功,并在控制臺或日志中查看請求和響應。

四、總結

通過本文,我們詳細探討了 Spring Boot解決跨域問題的三種方法,包括全局配置、使用注解和自定義過濾器。每種方法都有其優缺點,選擇哪種方式取決于應用的具體需求和復雜性。

  • 全局配置: 適用于需要統一配置跨域策略的應用。
  • @CrossOrigin注解: 適合于特定控制器或方法的跨域配置。
  • 自定義過濾器: 提供更靈活的跨域處理方式。
責任編輯:趙寧寧 來源: 猿java
相關推薦

2021-06-06 13:05:15

前端跨域CORS

2022-09-07 07:05:25

跨域問題安全架構

2022-02-22 11:54:05

跨域項目前后端

2022-03-11 10:01:47

開發跨域技術

2023-02-15 07:03:41

跨域問題面試安全

2023-04-07 10:51:39

2022-10-13 14:11:29

瀏覽器域名端口

2024-12-02 14:30:20

2017-08-20 12:49:59

瀏覽器跨域服務器

2024-08-28 08:45:22

2025-01-02 09:48:52

JVMCARD_元素

2012-09-05 11:09:15

SELinux操作系統

2009-02-18 09:30:10

AJAX跨域XML

2019-11-11 17:34:16

前端開發技術

2024-01-25 11:04:51

跨域問題反向代理層網關層

2024-02-27 08:14:51

Nginx跨域服務

2024-08-02 08:21:52

Spring項目方式

2010-04-29 17:46:31

Oracle死鎖

2024-04-07 08:11:01

SpringHTTP瀏覽器

2012-03-27 15:23:15

JSONPAJAX
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩综合一区 | 欧美精品久久久久 | 日本a v在线播放 | 91免费小视频 | www.亚洲区 | 欧美天堂 | 91资源在线 | 超碰97人人人人人蜜桃 | 欧美性成人 | 国产精品久久久久久久久久免费 | 福利网址| 欧美三级免费观看 | 一区二区成人在线 | 亚洲欧美日韩精品久久亚洲区 | 久久亚洲经典 | 六月成人网 | 欧美人妖网站 | 欧美一区二区三区久久精品 | 久久在线看 | 国产中文视频 | 日本精品一区二区三区视频 | 亚洲国产成人精品女人久久久 | 中文字幕男人的天堂 | 伊人精品一区二区三区 | 日日摸夜夜爽人人添av | 国产一区二区精品在线观看 | 国产激情视频网 | 欧美激情国产精品 | 色片在线观看 | 亚洲一区二区三区免费在线观看 | 国产一区二区精华 | 久久乐国产精品 | 午夜在线 | 在线看av的网址 | 国产精品视频偷伦精品视频 | 亚洲人成免费 | 三级国产三级在线 | 日韩三级| 国产欧美一区二区精品久导航 | 国产亚洲精品精品国产亚洲综合 | 欧美日韩在线观看一区 |