以下是关于“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跨域请求的问题,可以按照以下步骤:
- 在Spring Boot的Controller类或方法上添加@CrossOrigin注解:
java
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:3000")
public class UserController {
// ...
}
- 保存修改并重新启动Spring Boot应用程序。
示例2:使用WebMvcConfigurer
假设我们需要使用WebMvcConfigurer以解决CORS跨域请求的问题,可以按照以下骤进行:
- 创建一个类实现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);
}
}
- 保存修改并重新启动Spring Boot应用程序。
总结
Spring Boot是一款流行的 Web框架,可以用于开发Web应用程序。在使用Spring Boot时,有时会遇到CORS跨域请求的问题。要解决这个问题,可以使用@CrossOrigin注解、WebMvcConfigurer或Filter。示例1演示了如何使用@CrossOrigin注解,示例2演示了如何使用WebMvcConfigurer。