代码之家  ›  专栏  ›  技术社区  ›  Martlark

JAAS tomcat登录模块传递ip地址的可能方法

  •  3
  • Martlark  · 技术社区  · 16 年前

    我一直在研究一种在web代码中将客户端ip以及用户ID和密码从JAAS登录页面传递到JAAS登录模块实现的方法。JAAS只允许将用户id和密码传递给登录模块。我的想法是使用java脚本代码将ip地址附加到用户id,然后调用表单submit。我只是没有合适的java脚本代码来做这件事。你能帮忙吗?

    该网页有两个输入字段,j_userid和j_password,JAAS代码知道如何查看它。那么,在表单提交之前,我可以使用什么javaScript代码将ip地址添加到j_userid字段中呢。我想到了“ip地址#userid”,然后在我的登录模块中,我将从userid中去掉ip地址。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Martlark    16 年前

    我创建了这两个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是从登录按钮调用的。您可以看到,我有一个bean将ip地址放入一个隐藏字段中。j_username JAAS字段也被隐藏,并由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用户ID。

        2
  •  0
  •   fg.    16 年前

    推荐文章