HTTP Post Request:401(未经授权)

时间:2018-04-20 10:46:49

标签: post cors httprequest

我有以下问题:

我的服务器以401错误响应HTTP POST。在同一个webapp中,我能够使用HTTP GET请求并且工作正常。我用邮递员测试了POST请求,并且我能够成功获取数据(所以至少它正在工作)...

请求代码(从Postman复制):

      var data = JSON.stringify({
        "query": {
          "objectTypeId": "168"
        }
      });

      var xhr = new XMLHttpRequest();
      xhr.withCredentials = true;

      xhr.addEventListener("readystatechange", function () {
        if (this.readyState === 4) {
          console.log(this.responseText);
        }
      });

      xhr.open("POST", <here is my url>);
      xhr.setRequestHeader("Content-Type", "application/json");
      xhr.setRequestHeader("crossdomain", "true");
      xhr.setRequestHeader("Authorization", "Basic XXXXXXXX");

      xhr.send(data);

我发现与此问题相关的大多数线程都指向CORS配置,但我认为这是有效的,因为get-request有效。无论如何,这里是CORS配置:

的web.xml:

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

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.configurationFile</param-name>
        <param-value>/WEB-INF/cors.properties</param-value>
    </init-param>
</filter>

cors.properties:

cors.allowGenericHttpRequests = true
cors.allowOrigin=*
cors.supportsCredentials = true
cors.supportedMethods=GET, POST, HEAD, PUT, DELETE, OPTIONS
cors.supportedHeaders=*

1 个答案:

答案 0 :(得分:0)

事实上,这是一个CORS问题。您的API需要正确回答这些OPTIONS请求,否则浏览器将阻止请求。相关的外部链接:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

SO上的其他人也为这个问题提供了其他更深入的答案。可以找到一个很棒的长篇答案here