功能篇:JAVA后端實現跨域配置

在Java后端實現跨域配置(CORS,Cross-Origin Resource Sharing)有多種方法,具體取決于你使用的框架。如果你使用的是Spring Boot或Spring MVC,可以通過以下幾種方式來配置CORS。

?

### 方法一:全局配置

?

對于所有請求的跨域配置,可以在Spring Boot應用中通過`WebMvcConfigurer`接口進行全局配置:

?

```java

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 CorsConfig {

?

? ? @Bean

? ? public WebMvcConfigurer corsConfigurer() {

? ? ? ? return new WebMvcConfigurer() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void addCorsMappings(CorsRegistry registry) {

? ? ? ? ? ? ? ? registry.addMapping("/**") // 允許所有的路徑

? ? ? ? ? ? ? ? ? ? .allowedOrigins("*") // 允許所有的來源

? ? ? ? ? ? ? ? ? ? .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允許的方法

? ? ? ? ? ? ? ? ? ? .allowedHeaders("*") // 允許的頭部信息

? ? ? ? ? ? ? ? ? ? .allowCredentials(true); // 是否允許發送Cookie

? ? ? ? ? ? }

? ? ? ? };

? ? }

}

```

?

### 方法二:基于注解的方式

?

對于特定控制器或方法級別的跨域配置,可以使用`@CrossOrigin`注解:

?

```java

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

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

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

?

@RestController

@CrossOrigin(origins = "http://example.com") // 指定允許的來源

public class MyController {

?

? ? @GetMapping("/api/test")

? ? public String test() {

? ? ? ? return "Hello, CORS!";

? ? }

}

```

?

### 方法三:通過過濾器實現

?

如果需要更細粒度的控制,或者你需要對所有進入應用程序的請求都添加CORS響應頭,你可以創建一個自定義過濾器:

?

```java

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.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

?

@Configuration

public class CorsFilterConfig {

?

? ? @Bean

? ? public Filter corsFilter() {

? ? ? ? return new Filter() {

? ? ? ? ? ? public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)

? ? ? ? ? ? ? ? ? ? throws IOException, ServletException {

? ? ? ? ? ? ? ? HttpServletResponse response = (HttpServletResponse) res;

? ? ? ? ? ? ? ? HttpServletRequest request = (HttpServletRequest) req;

? ? ? ? ? ? ? ? response.setHeader("Access-Control-Allow-Origin", "*");

? ? ? ? ? ? ? ? response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");

? ? ? ? ? ? ? ? response.setHeader("Access-Control-Max-Age", "3600");

? ? ? ? ? ? ? ? response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");

?

? ? ? ? ? ? ? ? if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {

? ? ? ? ? ? ? ? ? ? response.setStatus(HttpServletResponse.SC_OK);

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? chain.doFilter(req, res);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

?

? ? ? ? ? ? public void init(FilterConfig filterConfig) {}

?

? ? ? ? ? ? public void destroy() {}

? ? ? ? };

? ? }

}

```

?

以上三種方法可以根據你的需求選擇最適合的一種或組合使用。全局配置適用于大多數場景,而基于注解的方式則提供了更加精細的控制。過濾器提供了一種更底層的方式來處理跨域問題,并且可以在其他方面增強安全性或功能性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63164.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數獨游戲app制作拆解(之一)——功能介紹

android studio版本:2023.3.1 例程名稱:shudu666 前陣子作了一個EXCEL版的數獨,再早之前就想作這個數獨app,但一直沒動手,一方面懶,另一方面我把自己繞到坑里了,之前做的是一解數獨的app,那個是有點難&am…

Spring注解篇:@Configuration詳解

前言 在Spring框架中,Configuration注解是實現Java配置的核心。它允許開發者以編程的方式定義Bean的創建過程,而不是使用XML文件。這種基于注解的配置方式,不僅簡化了配置的復雜性,還提高了代碼的可讀性和可維護性。 摘要 本文…

通過一個例子學習回溯算法:從方法論到實際應用

回溯算法:從方法論到實際應用 回溯算法(Backtracking)是一種通過窮舉法尋找問題所有解的算法,它的核心思想是逐步構建解空間樹,在每個步驟中判斷當前解是否合法。如果不合法,就“回溯”到上一步&#xff0…

Python隨機抽取Excel數據并在處理后整合為一個文件

本文介紹基于Python語言,針對一個文件夾下大量的Excel表格文件,基于其中每一個文件,隨機從其中選取一部分數據,并將全部文件中隨機獲取的數據合并為一個新的Excel表格文件的方法。 首先,我們來明確一下本文的具體需求。…

構建樹莓派溫濕度監測系統:從硬件到軟件的完整指南

?作者簡介:2022年博客新星 第八。熱愛國學的Java后端開發者,修心和技術同步精進。 🍎個人主頁:Java Fans的博客 🍊個人信條:不遷怒,不貳過。小知識,大智慧。 💞當前專欄…

28. Three.js案例-創建圓角矩形并進行拉伸

28. Three.js案例-創建圓角矩形并進行拉伸 實現效果 知識點 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 3D 場景的主要渲染器。 構造器 WebGLRenderer( parameters : Object ) 參數類型描述parametersObject渲染器的配置參數,可選。 …

開源Java快速自測工具,可以調用系統內任意一個方法

java快速測試框架,可以調到系統內任意一個方法,告別寫單測和controller的困擾。 開源地址:https://gitee.com/missyouch/Easy-JTest 我們在開發時很多時候想要測試下自己的代碼,特別是service層或者是更底層的代碼,就…

004 QT常用控件Qwidget_上

文章目錄 前言控件概述QWidgetenable屬性geometry屬性windowTitle屬性windowlcon屬性 小結 前言 本文將會向你介紹常用的Qwidget屬性 控件概述 Widget 是 Qt 中的核心概念. 英文原義是 “?部件”, 我們此處把它翻譯為 “控件” . 控件是構成?個圖形化界面的基本要素. QWi…

Android 好的開源庫

1. 權限請求框架 GitHub - getActivity/XXPermissions: Android 權限請求框架,已適配 Android 14 2. 下載框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine.

Flash語音芯片相比OTP語音芯片的優勢

Flash語音芯片和OTP語音芯片是兩種常見的語音解決方案,在各自的應用領域中發揮著重要作用。本文?將介紹Flash語音芯片相比OTP(One-Time Programmable)語音芯片的顯著優勢?。 1?.可重復擦寫?:Flash語音芯片的最大特點是支持多次編程和擦除&#xff0c…

Android命令行工具--dumpsys

dumpsys 是一種在 Android 設備上運行的工具,可提供有關系統服務的信息。可以使用 Android 調試橋 (adb) 從命令行調用 dumpsys,獲取在連接的設備上運行的所有系統服務的診斷輸出。 此輸出通常比您想要的更詳細,因此請使用此頁面上的命令行選…

【深度學習】深刻理解Swin Transformer

Swin Transformer 是一種基于 Transformer 的視覺模型,由 Microsoft 研究團隊提出,旨在解決傳統 Transformer 模型在計算機視覺任務中的高計算復雜度問題。其全稱是 Shifted Window Transformer,通過引入分層架構和滑動窗口機制,S…

從零開始學習 sg200x 多核開發之 sophpi 編譯生成 fip.bin 流程梳理

本文主要介紹 sophpi 編譯生成 fip.bin 流程。 1、編譯前準備 sophpi 的基本編譯流程如下: $ source build/cvisetup.sh $ defconfig sg2002_wevb_riscv64_sd $ clean_all $ build_all $ pack_burn_image注: 需要在 bash 下運行clean_all 非必要可以不…

mysql客戶端命令

目錄 結束符 ; \g \G 中斷輸入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ?編輯 notee (\t) prompt (\R) source (\.) system (\!) ?編輯 use (\u) help contents 結束符 ; \g \G 當我…

scala隱式函數

1 定義 通常我們所說的隱式函數也稱為 隱式轉換,是使用 implicit 修飾的函數 作用: 可以通過一個隱式函數將一種類型轉變為另一種類型 隱式轉換有兩種應用場景: 類型轉換,隱式轉換為期望類型 類型增強 2 示例 ①:類…

Tomcat原理(4)——嘗試手動Servlet的實現

目錄 一、什么是Servlet 1.servlet的定義 2.servlet的結構 二、實現servlet的流程圖 三、具體實現代碼 1、server 2.實體類request&response 3.HttpServlet抽象類 4.再定義三個servlet進行測試 Tomcat原理(3)——靜&動態資源以及運行項…

Node.js內置模塊

1.內置模塊 Node.js的中文網參考手冊:https://nodejs.cn//api 幫助文檔 API文檔:查看對應的模塊,左邊是模塊,右邊是模塊的成員 源碼:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 創建web服務器的模塊 -->進入源碼中,搜索…

【RAG實戰】RAG與大模型應用

1.1 大模型應用的方向:RAG 1.1.1 什么是RAG 1. 生成式AI 一種能夠生成各類內容的技術,包括文本、圖像、音頻和合成數據。自2022年底ChatGPT在全球范圍內推廣以來,基于Transformer解碼器結構的大模型已能在短時間內為用戶生成高質量的文本、…

基于DeepSpeed Chat詳解 PPO 算法中的actor_loss_fn及其核心參數

詳解 PPO 算法中的 actor_loss_fn 及其核心參數 1. 引言 在強化學習中,PPO(Proximal Policy Optimization,近端策略優化)算法是一種經典且高效的策略優化方法。它通過重要性采樣(Importance Sampling)和策…

D3 基礎1

D3 D3.js (Data-Driven Documents) 是一個基于 JavaScript 的庫&#xff0c;用于生成動態、交互式數據可視化。它通過操作文檔對象模型 (DOM) 來生成數據驅動的圖形。官方網站是 https://d3js.org/ <!DOCTYPE html> <html lang"en"><head><me…