Java 跨域设置请求头 OPTIONS 的实现指南

近年来,随着前端与后端分离架构的盛行,跨域问题逐渐凸显。很多开发者,尤其是刚入行的小白,常常对如何解决这些跨域问题感到困惑。本文将详细介绍如何在 Java 中实现跨域设置请求头 OPTIONS,并给出具体的步骤和示例代码。

整件事情的流程

下面的表格简要列出了实现跨域请求的步骤:

步骤 描述
1. 引入依赖 在项目中添加跨域支持的库
2. 配置过滤器 创建一个过滤器来处理跨域请求
3. 实现请求处理 在过滤器中实现对OPTIONS请求的处理
4. 测试 通过前端请求验证跨域设置是否成功

每一步需要做什么

1. 引入依赖

在你的 pom.xml 文件中添加 Spring Web 依赖(如果你使用的是 Maven):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

该依赖包提供了 Spring Boot 的基本功能,包括跨域支持。

2. 配置过滤器

创建一个名为 CorsFilter 的类,该类实现 Filter 接口。这个过滤器的主要目的是拦截请求并设置跨域的响应头。

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CorsFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        // 设置允许的源
        httpResponse.setHeader("Access-Control-Allow-Origin", "*");
        // 设置允许的方法
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        // 设置允许的请求头
        httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");

        // 如果是预检请求,直接返回
        if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) {
            return;
        }

        chain.doFilter(request, response);
    }

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

    @Override
    public void destroy() {}
}

代码解释:

  • setHeader 方法用于设置允许的原点、请求方法和请求头。
  • if 语句检查请求方法是否为 OPTIONS,如果是,则直接返回。

3. 实现请求处理

在 Spring Boot 应用的启动类中,将你刚才创建的 CorsFilter 注册为一个 Bean。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Bean
    public CorsFilter corsFilter() {
        return new CorsFilter();
    }
}

此代码通过 @Bean 注解将 CorsFilter 注册为 Spring 的组件。

4. 测试

通过 Postman 或其他工具发送一个跨域的请求,验证跨域设置是否成功。

请求示例:

OPTIONS /api/test HTTP/1.1
Host: yourdomain.com
Origin: 

旅行图

下面的旅行图通过 mermaid 语法描述了实现跨域请求的过程:

journey
    title 跨域请求实现过程
    section 步骤
      引入依赖: 5: 引入 Spring Web 依赖
      配置过滤器: 4: 创建 CorsFilter
      实现请求处理: 3: 在启动类中创建过滤器 Bean
      测试: 2: 通过工具验证跨域

结尾

通过以上步骤,你已经学会了如何在 Java 中实现跨域设置请求头 OPTIONS。掌握这些知识后,你可以在开发中更灵活地处理不同源之间的请求。同时,了解跨域的机制也有助于你写出更安全、更高效的代码。希望这篇文章能对你有所帮助,如果你在实现过程中有任何疑问,欢迎随时提问!