JAAS tomcat login do módulo possível método para passar o endereço IP
-
05-07-2019 - |
Pergunta
Eu estive olhando para uma maneira de passar o ip do cliente, bem como o ID de usuário e senha de uma página de login JAAS ao JAAS implementação do módulo de login no meu código web. JAAS permite apenas o ID de usuário e senha a serem passados ??para o módulo de login. Minha idéia é ter um código java script para anexar o endereço IP para o ID do usuário e, em seguida, chamar o formulário de envio. Eu simplesmente não tenho o código java script direito de fazer isso. Pode você ajudar?
A página web tem dois campos de entrada, j_userid e j_password, que o código JAAS sabe que procurá-lo. Então, o código JavaScript que posso usar para adicionar o endereço IP para o campo j_userid antes do envio de formulário. Eu estava pensando em 'ip-address # ID de usuário' e depois no meu módulo de login Eu levaria o endereço IP fora da ID de usuário.
Solução
Eu criei essas duas funções 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 é chamado a partir de um botão de login. Você pode ver que eu tenho um feijão colocar o endereço ip em um campo escondido. O campo JAAS j_username também está oculto e é preenchido pela função 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()" />
É mungs o IP para o nome do usuário e chama as JAAS enviar funções. Em seguida, no módulo de login eu recebo o nome do endereço IP e usuário para fora.
String userid = username;
if( username.contains( "#" ) )
{
ip = username.split( "#" )[0];
userid = username.split( "#" )[1];
}
Basta lembrar que a FacesContext.getCurrentInstance (). GetExternalContext (). GetRemoteUser () agora tem o ip # ID de usuário nele.
Outras dicas
Desculpe, eu não acho que há uma maneira de obter o ip no lado do cliente, em Javascript simples.
Testando o ip remoto no lado do servidor provavelmente não é uma solução, se você não controla a infra-estrutura entre o cliente eo servidor (balanceadores de carga, proxies ...). Se você está confiante de que o ip remoto é o ip do cliente, você deve ser capaz de cortar um tomcat válvula ou um filtro de servlet.