【问题标题】:request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource [duplicate]请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]
【发布时间】:2016-08-04 07:56:54
【问题描述】:

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

   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、模型和集合如下。

$.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'
    });

【问题讨论】:

标签: tomcat backbone.js spring-security


【解决方案1】:

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

    rootContext.setServletContext(container); 

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

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

【讨论】:

    【解决方案2】:

    我在 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>
    

    【讨论】:

      【解决方案3】:

      在 express.js 中:

      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 服务器中:

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

      【讨论】:

        猜你喜欢
        • 2016-02-22
        • 2019-02-24
        • 1970-01-01
        • 2016-02-23
        • 2018-05-06
        • 1970-01-01
        • 2017-11-11
        • 2017-04-09
        • 2017-09-08
        相关资源
        最近更新 更多