gpt4 book ai didi

javascript - Liferay:允许远程访问 JSON Web 服务

转载 作者:行者123 更新时间:2023-12-01 03:49:40 26 4
gpt4 key购买 nike

我正在尝试从同一台计算机但在不同端口访问 Liferay 提供的 JSON Web 服务。

我在 portal-ext.properties 文件中设置了以下属性:

json.servlet.hosts.allowed=127.0.0.1
auth.token.check.enabled=true
jsonws.servlet.https.required=false
json.web.service.enabled=true
axis.servlet.hosts.allowed=127.0.0.1
json.service.auth.token.hosts.allowed=127.0.0.1

我还配置了 $LIFERAY_HOME/tomcat-8.0.32/webapps/ROOT/WEB-INF/web.xml 中的 web.xml 文件,并添加了尽管在论坛的一些帖子中说没有必要,但以下内容:

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

我可以使用curl 访问端点,但无法从在其他端口运行的应用程序访问,因此出现以下错误:

 Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

用 Javascript 执行请求的代码如下:

var url = `http://127.0.0.1:8080/api/jsonws/user/get-user-by-email-address/?companyId=20116&emailAddress=test%liferay.com&p_auth=${key}`;

var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener('readystatechange', function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});

xhr.open('GET', url);
xhr.setRequestHeader('authorization', 'Basic Y2FsYmVyY2FAYXV0ZW50aWEuY29tOnRlc3Q=');
xhr.setRequestHeader('cache-control', 'no-cache');

xhr.send(data);

我认为这与portal-ext.properties配置有关,也许与端口有关。有什么想法吗?

最佳答案

这实际上并不是 Liferay 的配置错误,而是与浏览器安全相关的问题,称为 CORS(跨源资源共享)。您可以阅读更多相关信息here但总的来说,它归结为这样一个事实:为了让 site Asite B 加载资源(这本质上就是 XMLHttpRequest 所做的事情) ),站点 B 需要通过特殊 header 指定该资源可供站点 A 使用!

Liferay 显然不会这样做,因为它无法知道您将从哪里消耗资源。对于您想要做的工作,您需要创建一个 servlet 过滤器并将其部署到 Liferay,您可以在其中自己添加适当的 header 。此类过滤器的示例可参见 here

关于javascript - Liferay:允许远程访问 JSON Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com