Springboot处理CORS跨域请求的三种方法

  • Post category:http

以下是关于“Springboot处理CORS跨域请求的三种方法”的完整攻略:

简介

Spring Boot是一款流行的Java Web框架,可以用于开发Web应用程序。在使用Spring Boot时,有时会到CORS跨域请求的问题。本文将介绍如何处理Spring Boot中的CORS跨域请求。

问题描述

在使用Spring Boot时有时会遇到CORS跨域请求的问题。例如,当我们在前端使用JavaScript向Spring Boot后端发送请求时,可能会遇到以下错误:

Access to XMLHttpRequest at 'http://localhost:8080/api/users' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

解决方法

解决Spring Boot中的CORS跨域请求,可以按照以下三种方法进行:

1. 使用@CrossOrigin注解

第一种解决Spring Boot中的CORS跨域请求的方法是@CrossOrigin注解。可以在Spring Boot的Controller类或方法上添加@CrossOrigin注解,如下所示:

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:3000")
public class UserController {
    // ...
}

这个将会允许来自http://localhost:3000的跨域请求。

2. 使用WebMvcConfigurer

第二种解决Spring Boot中的CORS跨域请求的方法是使用WebMvcConfigurer。可以创建一个类实现WebMvcConfigurer接口,并在addCorsMappings方法中添加跨域配置,如下所示:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://localhost:3000")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

这个将会允许来自http://localhost:3000的跨域请求,并允许GET、POST、PUT和DELETE方法。

3. 使用Filter

第三种解决Spring Boot中的CORS跨域请求的方法使用Filter。可以创建一个类实现javax.servlet.Filter接口,并在doFilter方法中添加跨域配置,如下所示:

@Component
public class CorsFilter implements Filter {
    @Override
    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", "http://localhost:3000");
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Max-Age", "3600");
        chain.doFilter(req, res);
    }
}

这个将会允许来自://localhost:3000的跨域请求,并允许GET、POST、PUT和DELETE方法。

示例1:使用@CrossOrigin注解

假设我们需要使用@CrossOrigin注解以解决CORS跨域请求的问题,可以按照以下步骤:

  1. 在Spring Boot的Controller类或方法上添加@CrossOrigin注解:

java
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:3000")
public class UserController {
// ...
}

  1. 保存修改并重新启动Spring Boot应用程序。

示例2:使用WebMvcConfigurer

假设我们需要使用WebMvcConfigurer以解决CORS跨域请求的问题,可以按照以下骤进行:

  1. 创建一个类实现WebMvcConfigurer接口:

java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}

  1. 保存修改并重新启动Spring Boot应用程序。

总结

Spring Boot是一款流行的 Web框架,可以用于开发Web应用程序。在使用Spring Boot时,有时会遇到CORS跨域请求的问题。要解决这个问题,可以使用@CrossOrigin注解、WebMvcConfigurer或Filter。示例1演示了如何使用@CrossOrigin注解,示例2演示了如何使用WebMvcConfigurer。