У меня есть следующий код, который должен получить IP-адрес пользователя:
public String getUserIP()
{
Object details = getDetails();
if (details instanceof WebAuthenticationDetails)
{
return ((WebAuthenticationDetails)details).getRemoteAddress();
}
return "";
}
@Nullable
public Object getDetails()
{
Authentication authentication = getCurrentUserAuth();
return authentication != null ? authentication.getDetails() : null;
}
Однако при некоторых неизвестных обстоятельствах он возвращает 127.0.0.1
вместо реального IP-адреса.
Я решил переписать так:
public String getUserIP()
{
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = attr.getRequest();
String ip = request.getHeader("X-Forwarded-For").split(',')[0];
return ip;
}
Но в некоторых случаях заголовок X-Forwarded-For
равен нулю.Исключение возникает только тогда, когда getUserIP()
из первого фрагмента возвращает действительный IP-адрес.В чем проблема?Веб-сервер Tomcat.Заранее спасибо.