Надежный способ получить IP-адрес клиента в одностороннем вызове метода CXF JAX-WS
Я использую следующий код для получения IP-адреса клиента для одностороннего вызова метода JAX-WS:
protected HttpServletRequest getServletRequest() {
MessageContext ctx = wsContext.getMessageContext();
return (HttpServletRequest) ctx.get( MessageContext.SERVLET_REQUEST );
}
protected synchronized String getClientIp() {
String clientIp = "";
HttpServletRequest request = getServletRequest();
if ( request != null ) {
clientIp = request.getRemoteAddr();
// Handle proxy
String header = request.getHeader( "x-forwarded-for" );
if( header != null && !header.isEmpty() ) {
clientIp = header.split( "," )[0];
}
}
return clientIp;
}
Когда несколько клиентов подключаются, IP-адрес, полученный для запроса, иногда является некорректным кешированным значением из более раннего запроса. Что такое надежный способ получения IP-адреса отправителя одностороннего вызова?
Ответы
Ответ 1
вы можете использовать следующий фрагмент кода для поиска IP-адреса клиента
Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
request.getRemoteAddr()
Ответ 2
Если ваша цель - установить соединение с веб-сервисом, возможно, WS-Addressing может быть полезно.
Альтернативные схемы адресации в стороне,
HttpServletRequest.getRemoteAddr
в сочетании с альтернативным IP-адресом getHeader
должны быть правильными.
Если это не так, то не много регресса
(да, я могу представить себе различные изгибы, но принцип остается).
Итак, у вас есть последняя/самая стабильная версия вашей платформы? Это похоже на проблему с вашей платформой, о которой вы не указали никаких подробностей.