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;
}