JBoss AS 7.1.1中的跨域POST

时间:2013-05-20 03:15:15

标签: java web-applications cross-domain jboss7.x

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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>