spring - 无法使用 Spring 和 Tomcat 启用 CORS

标签 spring tomcat

我在 localhost:9090 运行我的 tomcat 7 服务器,xampp 在端口 80 上运行。我想从端口 80 向端口 9090 上的 REST-API (Spring 4.2.2) 发出 PUT 请求(使用 jQuery)。

我收到这个错误:

XMLHttpRequest cannot load http://localhost:9090/rest/location/8609d865-d87a-4340-ab87-0e7f90a6fda9. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 403.

谷歌搜索后,我找到了几个解决方案 - 但没有一个有效。

我尝试了什么:

-在web.xml中添加过滤器

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

-向我的 Controller 添加注解

@CrossOrigin
@RestController
public class LocationController

-为我的回复添加标题

return ResponseEntity.status(HttpStatus.OK).header("Access-Control-Allow-Origin", "*").build();

-添加一个OPTIONS路由

@RequestMapping(value = "/**", method = RequestMethod.OPTIONS)
@ResponseBody
public ResponseEntity options(@PathVariable String locationID) {
    return ResponseEntity.status(HttpStatus.OK).header("Access-Control-Allow-Origin", "*").build();
}

它们都不适合我,我仍然收到上述错误。有什么想法吗?

最佳答案

这就是我在当前项目中的做法:

  • pom.xml 中添加了以下依赖项

<dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>cors-filter</artifactId> <version>2.4</version> </dependency>

  • web.xml 中添加了以下过滤器

<filter> <filter-name>CORS</filter-name> <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> <init-param> <param-name>cors.supportedMethods</param-name> <param-value>GET, POST, HEAD, OPTIONS, DELETE, PUT</param-value> </init-param> </filter>

  • 将过滤器映射添加到过滤器映射列表的顶部

<filter-mapping> <filter-name>CORS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

请注意,我明确添加了 PUT作为支持的方法。

这种方法的唯一缺点是额外的依赖性。

spring-web有自己的 CORS 过滤器实现(org.springframework.web.filter.CorsFilter)。我确信可以用相同的方式配置 Spring 。

关于spring - 无法使用 Spring 和 Tomcat 启用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149663/

相关文章:

Java HttpServletRequest isUserInRole 无法正常工作(根据请求安全性)servlet api 2.4

spring - 为什么在 Spring Boot 中有不同类型的集成测试

java - 如何使标志在 24 小时后自动更改

tomcat - 减少 Tomcat 错误页面中的信息泄露

java - jconsole 监控的意外 tomcat 内存使用增加

java - apache tomcat 服务器上的 500 内部服务器错误

java - nio、DMA、sendfile和epoll之间有什么关系

spring - 使用 Spring Reactive 时如何验证 Mono

java - 用于枚举接口(interface)的 Spring @ResponseBody 和 Jackson JsonSerializer

java - Spring MVC 在 Controller 之间传递数据