当前位置: 首页 > article >正文

功能篇: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.kler.cn/a/443884.html

相关文章:

  • Oracle 中间件 Webcenter Portal服务器环境搭建
  • R 常用的内置软件包及功能介绍
  • 【bodgeito】攻防实战记录
  • 【libuv】Fargo信令1:client发connect消息给到server
  • MVVM、MVC、MVP 的区别
  • 火山引擎发布数据飞轮 2.0,AI 重塑企业数据消费
  • 字节面经
  • Android Studio新建项目在源码中编译
  • MySQL基础笔记(二)
  • mHandPro 动捕手套:在具身智能、VR互动及仿真教学中的卓越表现
  • 【ppt技巧】如何设置PPT带有密码的只读模式?
  • Elasticsearch 8.x 集成与 Java API 使用指南
  • 分布式链路追踪-03-分布式系统跟踪工具,如何设计 span?
  • 基于JavaWeb(SSM+MySQL)问卷调查管理系统设计与实现毕业论文
  • 不同协议下的接口测试方案设计
  • CEF127 编译指南 MacOS 篇 - 编译 CEF(六)
  • 【计算机视觉基础CV】02-入门详解图像分类、经典数据集、比赛与冠军图像模型演进史
  • OpenCV DCT图像去噪(SIMD加速)
  • linux中 umask 命令
  • 流式处理,为什么Flink比Spark Streaming好?
  • 前端JavaScript(六)---JS中的事件
  • 中软高科身份证云解码金融(银行)解决方案介绍
  • 智源大模型通用算子库FlagGems四大能力升级 持续赋能AI系统开源生态
  • 简单工厂、工厂方法、抽象工厂的区别
  • 哪些视频媒体平台可给企业直播间做分发拉流转播宣传?提升流量数据!
  • 如何配置防火墙提高服务器安全性