【问题标题】:Cross domain requests for liferay 6.06 web servicesLiferay 6.06 Web 服务的跨域请求
【发布时间】:2014-01-20 22:12:59
【问题描述】:

我已经能够使用此 URL 并通过适当的身份验证从 liferay 网络服务访问 json 数据:

http://login:password@localhost:8080/tunnel-web/secure/json

但我需要从另一个域名的 javascript 中查询这个。

我遇到了经典错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://my.origin.com/' is therefore not allowed access.

我知道我必须在服务器响应标头上允许这个来源,这可以在 jsp 中像这样完成:

response.setHeader("Access-Control-Allow-Origin", "http://my.origin.com");

问题是,我怎样才能允许 liferay 的默认 web 服务使用这个来源?

编辑:

我尝试添加一个 portal-ext.properties 文件:

    axis.servlet.hosts.allowed=
    axis.servlet.https.required=false

    tunnel.servlet.hosts.allowed=
    tunnel.servlet.https.required=false

//empty values are meant to allow any IP...

但这并没有改变任何东西:(

PS:我正在使用 liferay 6.06

【问题讨论】:

  • 你用什么来提出请求? AlloyUI 还是 jquery?
  • 我正在使用 jquery。不过没关系,也可以从纯javascript调用,标准XMLHttpRequest对象没有?
  • 试试这个response.setHeader("Access-Control-Allow-Origin", "*"); 然后告诉我
  • 问题是,我不知道哪个文件正在发送响应,因为我点击了“tunnel-web”地址,所以我不知道在哪里设置这个标头:/
  • 如果liferay前面有apache web server(或类似的),可以在proxy pass rules中设置response header..

标签: javascript web-services cross-domain liferay liferay-6


【解决方案1】:

如果你想改变 Tomcat,你必须改变 liferay web.xml 以启用 Cors 过滤器,请关注这篇文章:

Access-Control-Allow-Origin: * in tomcat

但对我来说,最好的方法是使用 proxypass 模块在 tomcat/liferay 前面安装一个 Apache Web 服务器 (httpd)。 Apache 服务器作为 tomcat 的反向代理运行。

在 proxypass 规则中,您可以设置 apache 以使用一些额外的标头填充响应。

参考这篇大文章:

How to correctly configure a reverse proxy with Apache, to be used for cross-domain AJAX?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2014-06-20
    • 2012-12-23
    • 2015-07-25
    • 2017-06-06
    相关资源
    最近更新 更多