关于tomcat:请求未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头

request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

本问题已经有最佳答案,请猛点这里访问。

我在我的示例应用程序中使用backbonejs。 以前,我在nodejs上托管这个,但现在想在tomcat上运行它,但是这个更改在客户端浏览器上给了我一个错误。 我搜索并发现要解决此问题,必须将crossdomain(https://stackoverflow.com/a/33820700/5086633)设置为true。 不知道我应该怎样和应该处理这个问题。 在这方面的任何帮助都非常感谢。

1
2
3
4
5
   XMLHttpRequest cannot load http://localhost:8080/backbonejs/testpost.
    Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
 Origin 'null' is therefore not allowed access. The response
had HTTP status code 403.

使用ajaxPrefilter,模型和集合如下。

1
2
3
4
5
6
7
8
9
10
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
      options.url = 'http://localhost:8080/backbonejs' + options.url;
    });
var Banks = Backbone.Collection.extend({
      url: '/testpost'
    });

    var Bank = Backbone.Model.extend({
      urlRoot: '/testpost'
    });


在express.js中:

1
2
3
4
5
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin","*");
  res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
  next();
});

在本机NodeJS服务器中:

1
2
res.header("Access-Control-Allow-Origin","*");
res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");

也可以用这个来实现......
这篇文章很方便如何在Spring Security 3.2中设置Access-Control-Allow-Origin过滤器
无需在tomcat服务器中执行此操作。 另外,我没有在这里使用AddFilterBefore。 下面的代码足以解决问题。

1
2
3
4
5
6
    rootContext.setServletContext(container);

             FilterRegistration.Dynamic corsFilter =
container.addFilter("corsFilter", CORSFilter.class);

 corsFilter.addMappingForUrlPatterns(null, false,"/*");


我在Web.xml中添加了这个功能。

1
2
3
4
5
6
7
8
 <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>