2013-03-28 51 views
2

我有不同的域两种应用:foo.bar.combar.com 我尝试从第一域第二发送请求。对于这一点,我添加了一个过滤器到域的web.xml:Spring MVC的解析POST跨域请求错过参数

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

而对于它的作品,除了IE浏览器所有浏览器。 对于IE我已经添加了特殊条件的firt服务器OB JS:

if ($.browser.msie && window.XDomainRequest) { 
      var xdr = new XDomainRequest(); 
      xdr.open("POST", "http://bar.com/user/login"); 
      var loginParam = get param here; 
      var passParam = get param here; 
      xdr.send("login=" + loginParam + "&password=" + passParam); 
      xdr.onerror = function() { 
       alert('in error'); 
      }; 
      xdr.onload = function() { 
       alert(xdr.responseText); 
      } 
     } else { 
      //Simple AJAX request 
     } 
    }); 

在此之后,我已经得到了我的服务器过滤器的要求! 但是我没有参数:登录密码他们错过了。 我该怎么办?我如何在IE中执行跨域POST请求?

+0

您如何验证登录名/密码未到达服务器?你可以做一个网络跟踪来查看实体HTTP请求中是否包含正文?另请阅读以下文章以了解IE的XDomainRequest的限制:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – monsur 2013-03-28 15:00:43

+0

我有在IE控制台中调试,这两个params被正常地发送到服务器。比起,在Java应用程序中启动了我的调试,并且在请求中没有参数 – Andrew 2013-03-28 16:15:12

+0

您可以包含IE中请求的外观快照吗?另外,你从哪里开始Java调试?在CORS过滤器之前,之中还是之后?在Java快照之前是否有任何过滤器或代码运行? – monsur 2013-03-28 20:34:44

回答

0

我有类似的问题。原来,对于IE8/IE9,XDocumentRequest does not set the Content-Type header的请求。它默认为text/plain

除非Content-Type设置为application/x-www-form-urlencoded,否则服务器框架(如Spring MVC)不会绑定表单参数。所以你需要在服务器上自定义一些东西来绑定表单参数。