[英]Liferay: Allow remote access to JSON Web Services
我正在尝试从同一台机器访问,但访问的端口是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
配置有关,也许与端口有关。 有任何想法吗?
我决定追随的方法是创建一个OSGi的模块使用刀片CLI支持Liferay提供脚手架休息服务( blade.rest与JAX-RS)(作为解释这里 )。 从那里,我配置了CXF端点和REST扩展器。 然后,我将UsersRestService
类修改为以下内容:
package com.liferay.blade.samples.rest;
import com.liferay.portal.kernel.service.UserLocalService;
import java.util.Collections;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@ApplicationPath("/blade.users")
@Component(
immediate = true, property = {"jaxrs.application=true"},
service = Application.class
)
public class UsersRestService extends Application {
@Override
public Set<Object> getSingletons() {
return Collections.singleton(this);
}
@GET
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public Response getUsers() {
String json = "{\n" + " \"value\": \"cool\"\n" + "}";
return Response
.status(200)
.entity(json)
.build();
}
@Reference
private volatile UserLocalService _userLocalService;
}
在此类中,您可以访问Liferay的服务,因此可以向API Rest公开您想要的内容。
我需要检查的最后一件事是“ Access-Control-Allow-Origin”属性,因为它似乎是在分配的位置,但是我不知道在哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.