Улучшенное получение IP адреса за nginx

This commit is contained in:
2026-02-21 00:02:51 +02:00
parent 3c9be407de
commit 38c8e07ef7
2 changed files with 31 additions and 1 deletions

View File

@@ -155,13 +155,23 @@ public class Server extends WebSocketServer {
}
@Override
public void onOpen(WebSocket socket, ClientHandshake arg1) {
public void onOpen(WebSocket socket, ClientHandshake handshake) {
/**
* Создаем нового клиента при открытии соединения.
* Передаем интервал heartbeat из настроек сервера.
* Если клиент не отправляет heartbeat в указанный интервал, его можно отключить.
*/
Client client = new Client(socket, this.settings.heartbeatInterval, this);
String ipAddress = handshake.getFieldValue("X-Forwarded-For");
if (ipAddress == null || ipAddress.isEmpty()) {
ipAddress = socket.getRemoteSocketAddress().getAddress().getHostAddress();
} else {
/**
* Берем первый IP адрес из списка разделенного запятой
*/
ipAddress = ipAddress.split(",")[0].trim();
}
client.setIpAddress(ipAddress);
socket.setAttachment(client);
if(this.listener == null){
return;

View File

@@ -29,6 +29,10 @@ public class Client {
* Интервал отправки heartbeat пакетов в миллисекундах.
*/
public long heartbeatInterval = 0;
/**
* IP-адрес клиента
*/
private String ipAddress;
/**
* Время последнего полученного heartbeat в миллисекундах.
*/
@@ -71,6 +75,22 @@ public class Client {
this.lastHeartbeatTime = System.currentTimeMillis();
}
/**
* Получает IP адрес клиента
* @return адрес
*/
public String getIpAddress() {
return this.ipAddress;
}
/**
* Устанавливает IP адрес клиента
* @param ipAddress адрес
*/
public void setIpAddress(String ipAddress){
this.ipAddress = ipAddress;
}
/**
* Получает уникальный идентификатор клиента.
* @return Идентификатор клиента.