功能篇: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.mzph.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…