IBM Worklight 6 - Как получить IP-адрес клиента на стороне адаптера

Я хочу, чтобы IP-адрес клиента был на стороне адаптера, но я не знаю, каков рабочий интерфейс API для этого. Я ищу это, но не везет.

Я использовал этот API на клиентском коде, который приведен ниже

WL.Device.getNetworkInfo(function (networkInfo) {
        console.log ("Ip address of device "+networkInfo.ipAddress);
       });

Он работает нормально, и я могу передать это адаптеру со стороны клиента. Но я просто хотел знать, может ли то же самое быть реализовано на стороне сервера в процедуре адаптера.

И я также использовал этот код, который приведен ниже

var request = WL.Server.getClientRequest();
    var userAgent = request.getHeader("User-Agent");

Можем ли мы получить IP-адрес здесь, используя этот API в процедуре адаптера.

1 ответ

WL.Server.getClientRequest() будет возвращать ссылку на объект Java HttpServletRequest ( http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html). Вы можете использовать Java API для получения необходимой информации, например,

var request = WL.Server.getClientRequest();
request.getRemoteAddr()
request.getRemoteHost()

Обратите внимание, что в случае наличия шлюзов / прокси между клиентом и вашим WL-сервером (и, скорее всего, есть) вышеупомянутые API получат информацию о прокси. Если вам нужен фактический IP-адрес устройства, вы можете использовать

var request = WL.Server.getClientRequest();
var IPAddress = request.getHeader('x-forwarded-for'); 

ОБНОВИТЬ:

Чтобы перебрать перечисление заголовков и получить полный список заголовков запросов, используйте следующий код:

    var headers = {};

var request = WL.Server.getClientRequest();
var headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
    var headerName = headerNames.nextElement();
    var headerValue = request.getHeader(headerName);
    headers[headerName] = headerValue;
}
Другие вопросы по тегам