2013-05-20 82 views
1

我在云服务器中有一个Web应用程序。我的Web应用程序的控制器之一是通过移动应用程序访问URL(使用JavaScript;我使用Titanium为Android和iOS开发)。我可以在没有任何问题的情况下访问GET方法,并且获得我想要的内容,但是当我调用POST方法发送要处理的信息时,我得到Bad Server - HTTP Error。为了保护我的URL,我使用在我的应用程序和JBoss(standalone.xml文件)中配置的BASIC认证。当我从Web应用程序内部的表单(使用JQuery Ajax)访问POST方法时,没关系,所以我认为这是一个跨域问题。JBoss AS 7.1.1中的跨域POST

是否有任何配置要在JBoss中完成,以便我的Web应用程序可以接收来自任何其他域的POST调用(当然,提供正确的用户名/密码对)。

在此先感谢!

+1

你是说,如果你使用GET网络调用工作正常,但如果你打开它发布它失败?创建一个可能没有参数的基本Web服务方法并进行POST调用。我更可能猜测你的问题与你传递的参数有关。你是将它们传递给查询字符串还是消息正文? – Martin

+0

我第二@Martin。如果它适用于'GET's,尽管不能保证,它*应该*也适用于'POST'。你不需要做一些配置来启用'GET'吗?您是否确定要发送'POST'所需的所有内容? – acdcjunior

回答

1

通常,这些跨域问题与浏览器有关,而不是服务器。浏览器将限制您使用AJAX更新到您所在页面的域的能力。有一些解决方法,如JSONP,但我不知道这是否可以用于POST。

我们决定使用第三方代理库HTTP Proxy Servlet。这个代理servlet允许您像使用简单的web.xml添加到本地可访问的域一样进行POST。做到这一点,我们永远不必惹JSONP,只要直JSON工作正常。

我们正在使用它来转发几个不同的路径到几个不同的服务器(您可以在同一个Web应用程序中使用此方法的多个转发器)。我们的web.xml文件仅仅是一系列的servlet映射(每个外部RESTful服务指向基路径):

<servlet> 
     <servlet-name>MyOneProxy</servlet-name> 
     <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class> 
     <init-param> 
     <param-name>targetUri</param-name> 
     <param-value>http://external-web-app.com/basePath</param-value> 
     </init-param> 
     <init-param> 
     <param-name>log</param-name> 
     <param-value>true</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyOneProxy</servlet-name> 
     <url-pattern>/internalBasePath/*</url-pattern> 
    </servlet-mapping> 
相关问题