Модуль входа в систему JAAS tomcat возможный способ передачи IP-адреса
-
05-07-2019 - |
Вопрос
Я искал способ передачи клиентского ip, а также идентификатора пользователя и пароля со страницы входа в систему JAAS в реализацию модуля входа в систему JAAS в моем веб-коде. JAAS позволяет только идентификатор пользователя и пароль передаваться в модуль входа в систему. Моя идея состоит в том, чтобы иметь код сценария Java, чтобы добавить IP-адрес к идентификатору пользователя, а затем вызвать форму отправки. У меня просто нет нужного кода Java-скрипта для этого. Вы можете помочь?
На веб-странице есть два поля ввода, j_userid и j_password, которые знает код JAAS для их просмотра. Так какой код javaScript я могу использовать, чтобы добавить IP-адрес в поле j_userid перед отправкой формы. Я думал о «ip-address # userid», а затем в своем модуле входа в систему я бы снял IP-адрес с идентификатора пользователя.
Решение
Я создал эти две функции javaScript.
function addIpSubmit()
{
var theForm = document.getElementById("login_form");
var userName = theForm.username.value;
userName = theForm.clientip.value + "#" + userName;
theForm.j_username.value = userName;
if( validate_required( theForm.username, "User ID is required" ) )
{
if( validate_required( theForm.j_password, "Password is required" ) )
{
theForm.submit();
}
}
}
function validate_required( field, alerttxt )
{
with (field)
{
if (value==null||value=="")
{
alert(alerttxt);
return false;
}
else
{
return true;
}
}
}
addIpSubmit вызывается с помощью кнопки входа в систему. Вы можете видеть, что у меня есть бин, чтобы поместить IP-адрес в скрытое поле. Поле JAAS имени j_username также скрыто и заполняется функцией addIpSubmit ().
<input id="clientip" type="hidden" name="clientip" value="#{loginMBean.ip}"/>
<input id="j_username" type="hidden" name="j_username" />
<input type="button" name="OtherLogin" value="Login" onclick="addIpSubmit()" />
Он связывает ip с именем пользователя и вызывает функции отправки JAAS. Затем в модуле входа в систему я получаю IP-адрес и имя пользователя.
String userid = username;
if( username.contains( "#" ) )
{
ip = username.split( "#" )[0];
userid = username.split( "#" )[1];
}
Просто помните, что FacesContext.getCurrentInstance (). getExternalContext (). getRemoteUser () теперь содержит ip # userid.
Другие советы
Извините, я не думаю, что есть способ получить ip на стороне клиента, в простом Javascript.
Тестирование удаленного ip на стороне сервера, вероятно, не является решением, если вы не контролируете инфраструктуру между клиентом и сервером (балансировщики нагрузки, прокси ...). Если вы уверены, что удаленный ip - это ip клиента, вы сможете взломать Valve или фильтр сервлетов.