簡體   English   中英

CORS發出使用Sencha CMD 6.5生成的App Android的POST請求(禁止的403)

[英]CORS issue POST request (403 Forbidden) of App Android generated with Sencha CMD 6.5

我很絕望。 我正在嘗試使用Sencha CMD 6.5生成一個應用Android(前端),該應用將請求發送到Tomcat服務器(后端)。

問題是POST方法,當App在標頭中發送請求時,“ Origin”參數設置為“ file://”,並且tomcat的CORS拒絕了該請求(禁止403)。

標題

Accept: */*
Accept-Encoding: gzip,deflate
Accept-Language: en-US;q=0.9
Connection: keep-aliv(e)
Content-Length: 39
Host: 192.168.1.91: 8080
Origin: file: //
Referer: -
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0(Linux;Android7.0;MI5Build/NRD90M;wv)AppleWebKit/537.36(KHTML,likeGecko)Version/4.0Chrome/64.0.3282.137MobileSafari/537.36

在web.xml中的tomcat 8.0上定義的過濾器

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
      <param-name>cors.allowed.origins</param-name>
      <param-value>*</param-value>
    </init-param>
     <init-param>
      <param-name>cors.allowed.methods</param-name>
      <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param> 
    <init-param>
      <param-name>cors.allowed.headers</param-name>
      <param-value>Cache-Control,Content-Language,Expires,Last-Modified,Pragma,Content-Type,X-Requested-With,Accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
     <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param> 
    <init-param>
      <param-name>cors.support.credentials</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>cors.preflight.maxage</param-name>
      <param-value>10</param-value>
    </init-param>
 </filter>

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

有趣的是,使用GET方法時,沒有在Origin參數中設置任何內容,而Tomcat CORS接受它。

只有兩種解決方案:

1.-設置參數標頭的來源(我在任何論壇上都找不到任何內容,例如senchaforum等)

2.-修改TOMCAT 8的CORS過濾器。(我在senchaforum之類的任何論壇中都找不到任何內容)

拜托,有人可以幫我嗎? 提前致謝

丹尼爾

解決方案是使用ContainerResponseFilter,而不是tomcat的過濾器。

import javax.ws.rs.ext.Provider;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;

@Provider
public class CORSResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext creq, ContainerResponseContext cres) {

    MultivaluedMap<String, Object> headers = cres.getHeaders();
    headers.add("Access-Control-Allow-Origin", "*");
    headers.add("Access-Control-Allow-Headers", "Cache-Control,Content-Language,Expires,Last-Modified,Pragma,Content-Type,X-Requested-With,Accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
    headers.add("Access-Control-Allow-Credentials", "false");
    headers.add("Access-Control-Allow-Methods", "GET,POST,HEAD,OPTIONS,PUT");
    //headers.add("Access-Control-Max-Age", "10");
    }

}

我已經嘗試過了,以防有人認為它可以與原始過濾器一起使用:

<init-param>
      <param-name>cors.support.credentials</param-name>
      <param-value>false</param-value>
</init-param>

歡迎大家,希望將來對您有所幫助。

丹尼爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM