Pregunta

He estado buscando una forma de pasar la IP del cliente, así como el ID de usuario y la contraseña de una página de inicio de sesión de JAAS a la implementación del módulo de inicio de sesión de JAAS en mi código web. JAAS solo permite que el ID de usuario y la contraseña se pasen al módulo de inicio de sesión. Mi idea es tener un código de script java para adjuntar la dirección IP a la ID de usuario y luego llamar al formulario de envío. Simplemente no tengo el código de script de Java correcto para hacer esto. ¿Puedes ayudar?

La página web tiene dos campos de entrada, j_userid y j_password, que el código JAAS sabe que deben buscarla. Entonces, ¿qué código javaScript puedo usar para agregar la dirección IP al campo j_userid antes de enviar el formulario? Estaba pensando en 'ip-address # userid' y luego, en mi módulo de inicio de sesión, quitaría la dirección IP del usuario.

¿Fue útil?

Solución

Creé estas dos funciones 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 se llama desde un botón de inicio de sesión. Puedes ver que tengo un bean para poner la dirección IP en un campo oculto. El campo JAAS de j_username también está oculto y se completa con la función 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()" />

Conecta la ip con el nombre de usuario y llama a las funciones de envío de JAAS. Luego, en el módulo de inicio de sesión, obtengo la dirección IP y el nombre de usuario.

String userid = username;

if( username.contains( "#" ) )
{
    ip = username.split( "#" )[0];
    userid = username.split( "#" )[1];
}

Solo recuerda que FacesContext.getCurrentInstance (). getExternalContext (). getRemoteUser () ahora tiene el ip # userid en él.

Otros consejos

Lo siento, no creo que haya una manera de obtener la ip en el lado del cliente, en Javascript simple.

Probar la ip remota en el lado del servidor probablemente no sea una solución si no controla la infraestructura entre el cliente y el servidor (balanceadores de carga, proxies ...). Si está seguro de que la IP remota es la IP del cliente, debería poder hackear una válvula Tomcat o un filtro de servlet.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top