Spring Boot 2.4.0 跨域问题

柠檬味的夏天 2024-03-25 ⋅ 23 阅读

引言

在使用 Spring Boot 2.4.0 进行开发时,你可能会遇到跨域问题。跨域请求是指在浏览器中发起的 AJAX 请求的目标 URL 和当前页面所在的 URL 不在同一个域或子域下。当我们需要在不同的域之间进行数据传输时,由于同源策略的限制,浏览器会拒绝这种跨域请求。

在本篇博客中,我们将讨论如何解决 Spring Boot 2.4.0 中的跨域问题,并提供一些解决方案。

解决方案

方案一:使用 @CrossOrigin 注解

Spring Boot 提供了 @CrossOrigin 注解,该注解可以直接放在控制器方法上,用于指定允许跨域访问的域名和其他可选的配置参数。例如,以下代码片段演示了如何在 Spring Boot 控制器方法上使用 @CrossOrigin 注解:

@RestController
@RequestMapping("/api")
public class MyController {

    @CrossOrigin(origins = "http://example.com")
    @GetMapping("/data")
    public String getData() {
        // 处理业务逻辑
        return "data";
    }
}

在上述示例中,控制器方法 getData() 允许来自 http://example.com 域的跨域请求。你还可以使用其他配置参数,例如 allowedHeadersallowCredentials,以满足特定的需求。

方案二:通过配置类解决跨域问题

除了使用 @CrossOrigin 注解外,你还可以通过编写自定义的配置类来解决跨域问题。首先,创建一个类,并添加 @Configuration 注解和 WebMvcConfigurer 接口的实现。然后,覆盖 addCorsMappings() 方法,添加跨域配置。以下是一个示例配置类:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

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

在上述示例中,我们为 /api 路径下的所有请求配置了允许来自 http://example.com 域的跨域访问。我们还指定了允许的请求方法、请求头以及是否允许发送凭证信息。

方案三:使用 CorsFilter 过滤器

还可以通过编写一个 CorsFilter 过滤器来解决跨域问题。创建一个类,并实现 javax.servlet.Filter 接口。然后,在 doFilter() 方法中添加跨域配置。以下是一个示例过滤器:

@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpRequest.addHeader("Access-Control-Allow-Origin", "http://example.com");
        httpRequest.addHeader("Access-Control-Allow-Methods", "GET,POST");
        httpRequest.addHeader("Access-Control-Allow-Headers", "Authorization,Content-Type");
        httpRequest.addHeader("Access-Control-Allow-Credentials", "true");
        httpRequest.addHeader("Access-Control-Max-Age", "3600");

        chain.doFilter(request, response);
    }
}

在上面的示例中,我们通过设置响应头来允许来自 http://example.com 域的跨域请求,并指定允许的请求方法、请求头以及是否允许发送凭证信息。

结论

使用 Spring Boot 2.4.0 进行开发时,很可能会遇到跨域问题。在本篇博客中,我们介绍了三种解决方案:使用 @CrossOrigin 注解、通过配置类解决跨域问题以及使用 CorsFilter 过滤器。

选择解决方案时,你可以根据自己的需求和项目特点来决定。无论哪种方案,都可以有效地解决 Spring Boot 2.4.0 跨域问题,确保你的应用程序正常运行。

希望本篇博客能够帮助你理解和解决 Spring Boot 2.4.0 中的跨域问题。如有任何疑问或建议,请随时在评论区提出。感谢阅读!


全部评论: 0

    我有话说: