我无法连接到 Liferay 7.2 中的 websocket "wss" 协议
I can't make a connection to the websocket "wss" protocol in Liferay 7.2
我通知您,代码可以在没有证书的情况下使用“ws”协议正常工作。我最近将证书添加到门户中,确保页面的连接是安全的。
我现在遇到的问题是它不适用于安全的“wss”协议,它已经在 firefox 和 chrome 上进行了测试。我不知道该怎么做。
接下来我将放置 portlet 中的代码片段。 (这里不放完整代码,放最重要的部分)。
view.jsp
$(document).ready(function() {
$('#conexion-chat').on('click', function(){
$('#display-chat-overlay').fadeIn('slow');
initWebSocket();
return false;
});
$('#close').on('click', function(){
$('#display-chat-overlay').fadeOut('slow');
$('#conexion-chat').css('display', '');
$('.msg-incoming-outgoing').children().remove();
$('.msg-incoming-outgoing').text('');
websocket.close();
return false;
});
});
function initWebSocket(){
$('#conexion-chat').css('display', 'none');
$('#display-chat-overlay').css('display', '');
$('.cloud_messages_unread').css('display','none');
if('${currentUserRol}' != '${rolPreferences}'){
$('.container').addClass('display-visitor');
$('.header-chat').addClass('display-visitor');
$('.inbox_people').addClass('display-visitor');
$('.mesgs').addClass('display-visitor');
$('.recent_heading.logo-sponsor').addClass('display-visitor');
$('.mesgs').find('h4').text('${rolPreferences}');
$('#sendField').prop('disabled', '');
startTimeSession();
}else{
$('.header-chat').addClass('display-sponsor');
$('.inbox_chat').children().remove();
$('.mesgs').find('h4').text('');
visitorNameHeader();
$('.mesgs .recent_heading.logo-sponsor').addClass('display-sponsor');
$('.inbox_people .recent_heading').addClass('visitor-list');
$('#display-chat-overlay').addClass('display-sponsor');
}
$('.title-header').text('${messageHeaderChat}' + ' ' + substringNameHeader('${rolPreferences}'));
websocket = new WebSocket('wss://my-domain.es/o/echo');
websocket.onopen = function (event) {
websocket.send(json_user());
};
websocket.onclose = function(event) {
console.log("DESCONECTADO");
};
websocket.onmessage = function(event) {
var message = event.data;
processMessage(message);
};
websocket.onerror = function(event) {
console.log("ERROR: " + event.data);
};
}
Websocket.java
@Component(
immediate = true,
property = {
"org.osgi.http.websocket.endpoint.path=/o/echo"
},
service = Endpoint.class
)
public class WebSocket extends Endpoint {
private static Log _log = LogFactoryUtil.getLog(WebSocket.class);
在 view.js 文件中创建了一个 websocket,并向其传递以下参数:
"wss: //my-domain.es/o/echo"
端点是“/o/echo”,在“@Component”中的class“Websocket.java”中获取。
"org.osgi.http.websocket.endpoint.path = /o/ echo"
我已经解决了使用安全 Websocket (wss) 协议时遇到的问题。我必须配置 apache web 服务器来反向 websocket 代理。此配置已按照以下网页上的步骤执行:
我通知您,代码可以在没有证书的情况下使用“ws”协议正常工作。我最近将证书添加到门户中,确保页面的连接是安全的。
我现在遇到的问题是它不适用于安全的“wss”协议,它已经在 firefox 和 chrome 上进行了测试。我不知道该怎么做。
接下来我将放置 portlet 中的代码片段。 (这里不放完整代码,放最重要的部分)。
view.jsp
$(document).ready(function() {
$('#conexion-chat').on('click', function(){
$('#display-chat-overlay').fadeIn('slow');
initWebSocket();
return false;
});
$('#close').on('click', function(){
$('#display-chat-overlay').fadeOut('slow');
$('#conexion-chat').css('display', '');
$('.msg-incoming-outgoing').children().remove();
$('.msg-incoming-outgoing').text('');
websocket.close();
return false;
});
});
function initWebSocket(){
$('#conexion-chat').css('display', 'none');
$('#display-chat-overlay').css('display', '');
$('.cloud_messages_unread').css('display','none');
if('${currentUserRol}' != '${rolPreferences}'){
$('.container').addClass('display-visitor');
$('.header-chat').addClass('display-visitor');
$('.inbox_people').addClass('display-visitor');
$('.mesgs').addClass('display-visitor');
$('.recent_heading.logo-sponsor').addClass('display-visitor');
$('.mesgs').find('h4').text('${rolPreferences}');
$('#sendField').prop('disabled', '');
startTimeSession();
}else{
$('.header-chat').addClass('display-sponsor');
$('.inbox_chat').children().remove();
$('.mesgs').find('h4').text('');
visitorNameHeader();
$('.mesgs .recent_heading.logo-sponsor').addClass('display-sponsor');
$('.inbox_people .recent_heading').addClass('visitor-list');
$('#display-chat-overlay').addClass('display-sponsor');
}
$('.title-header').text('${messageHeaderChat}' + ' ' + substringNameHeader('${rolPreferences}'));
websocket = new WebSocket('wss://my-domain.es/o/echo');
websocket.onopen = function (event) {
websocket.send(json_user());
};
websocket.onclose = function(event) {
console.log("DESCONECTADO");
};
websocket.onmessage = function(event) {
var message = event.data;
processMessage(message);
};
websocket.onerror = function(event) {
console.log("ERROR: " + event.data);
};
}
Websocket.java
@Component(
immediate = true,
property = {
"org.osgi.http.websocket.endpoint.path=/o/echo"
},
service = Endpoint.class
)
public class WebSocket extends Endpoint {
private static Log _log = LogFactoryUtil.getLog(WebSocket.class);
在 view.js 文件中创建了一个 websocket,并向其传递以下参数:
"wss: //my-domain.es/o/echo"
端点是“/o/echo”,在“@Component”中的class“Websocket.java”中获取。
"org.osgi.http.websocket.endpoint.path = /o/ echo"
我已经解决了使用安全 Websocket (wss) 协议时遇到的问题。我必须配置 apache web 服务器来反向 websocket 代理。此配置已按照以下网页上的步骤执行: