📅  最后修改于: 2023-12-03 14:40:13.317000             🧑  作者: Mango
CORS(跨源资源共享)是一种机制,允许Web应用程序从其他域访问其资源。而Spring则是一个开源框架,用于Java平台的企业应用程序开发。
当使用Spring构建Web应用程序时,您可能需要使用CORS来允许从其他域访问您的资源。本文将介绍如何使用Spring实现CORS。
Spring提供了 @CrossOrigin 注解,可以在控制器方法上使用。该注解允许从指定的域中访问控制器方法返回的资源。以下是使用 @CrossOrigin 注解的示例:
@RestController
public class ExampleController {
@CrossOrigin(origins = "http://example.com")
@GetMapping("/example")
public String example() {
return "Hello, World!";
}
}
在上面的示例中,我们使用 @CrossOrigin 注解将 http://example.com 添加到允许跨域请求的列表中。
如果您需要在整个应用程序中启用CORS,可以使用 WebMvcConfigurer。以下是添加 CORS 配置的示例:
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")
.allowedOrigins("*")
.allowedHeaders("*");
}
}
在上面的示例中,我们使用 WebMvcConfigurer 将基本配置添加到应用程序中。addCorsMappings
方法允许从任何来源访问任何路径,而 allowedMethods
和 allowedHeaders
允许在跨域请求中使用的 HTTP 方法和标头。
您还可以使用过滤器实现 CORS。以下是使用 Spring 的 Filter 实现 CORS 的示例:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
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", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Max-Age", "3600");
chain.doFilter(req, res);
}
}
在上面的示例中,我们使用 Filter 将基本配置添加到应用程序中,并将其标记为可以在Spring中使用的组件。
总的来说,以上三种方法都可以成功实现CORS,开发人员应该根据自身需要选择使用哪种方式,来为自己的Web应用程序添加必要的CORS支持。