2012-08-27 98 views
2

我正在使用服務器,我正在嘗試跨域腳本。Apache Tomcat和CORS

我試着添加http://software.dzhuvinov.com/cors-filter-installation.html,並將java文件放在.../tomcat/lib /(並在.../tomcat/webapps/MYAPP/WEB-INF/lib /中,因爲它不是工作),並已修改web.xml以包括...

<servlet> 
    <description>Desciption</description> 
    <display-name>Displayname</display-name> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>java.path</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/wsdl</url-pattern> 
</servlet-mapping> 
<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <servlet-name>myservlet</servlet-name> 
</filter-mapping> 

而且我重新啓動web服務器。

我無法使Access-Control-Allow-Origin正常工作。我不斷收到403錯誤。

我想我一定沒有正確地遵循網站上的3個步驟。任何想法如何使其工作?

謝謝。編輯1:我聲明我的網址和我的肥皂消息之前,這個調用作爲url和soapMessage。我相信他們都是很好的形成,因爲他們在soapUI中工作得很好。

電話是:

$.ajax({ 
    type: "POST", 
     url: url, 
     dataType: "xml", 
     contentType: "text/xml", 
     //crossDomain: true, 
     data: soapMessage, 
     //xhrFields: { 
     // withCredentials: true 
     //}, 
     success: function(data){ 
      var xml = data.xml; 
      console.log("Success!"); 
      console.log(xml); 
      //[do something with the xml] 
     }, 
     error: function(data){ 
      var xml = data.xml; 
      console.log("Error!"); 
      console.log(xml); 
      //[do something with the xml] 
     }, 
     complete: function(data){ 
      var xml = data.xml; 
      console.log("Complete!"); 
      console.log(xml); 
      //[do something with the xml] 
     } 

我一直在試圖與點點運氣不同領域。我不確定它是否值得注意,但是當我不包含dataType時,響應標頭指示Access-Control-Allow-Origin我想查看並返回一個415錯誤(不支持媒體類型)。

請求標頭示例:

OPTIONS /servlet/wsdl?wsdl HTTP/1.1 
Host: otherserver:8080 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: thiswebpage.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1 
Access-Control-Request-Headers: origin, content-type, accept 
Accept: */* 
Referer: thiswebpage.com/thisForm.cfm 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

示例響應頭:

HTTP/1.1 403 Forbidden 
Server: Apache-Coyote/1.1 
Content-Type: text/plain 
Content-Length: 86 
Date: Tue, 28 Aug 2012 13:12:04 GMT 

還有其他的過濾器(web.xml文件是巨大的),但可以實現的東西,僅僅是這些。我需要去創建該文件的公司,因爲我的老闆可能不會讓我接觸這些(我只是一名實習生)。

<filter> 
    <filter-name>agentSecurityModeFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>agentSecurityModeFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

我不知道自己在做什麼在這裏...看來他們兩次添加相同的過濾器來使用不同的名稱相同的URL模式。

再次,謝謝!

+0

您是否可以包含樣本http請求和響應,以及您如何提出請求的代碼片段?你有沒有安裝其他過濾器? 403聽起來像是一個可能的身份驗證錯誤,這意味着請求可能會被其他一些過濾器拒絕。 – monsur

+0

我已經做了一些編輯以包含您提出的問題。我即將閱讀http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/web/filter/DelegatingFilterProxy.html上的其他過濾器,看看它是否可以問題。感謝您的評論。 – Sraaz

+0

當然你不使用Spring 1.2?這真的很舊。 – Pidster

回答

0

您是否試圖按以下方式配置CORSFilter?

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 

    <init-param> 
      <param-name>cors.allowOrigin</param-name> 
      <param-value>thiswebpage.com</param-value> 
    </init-param> 
</filter>