2009-07-29 75 views
3

我一直在寻找一种方法,将客户端IP以及用户标识和密码从JAAS登录页面传递到我的Web代码中的JAAS登录模块实现。 JAAS只允许将用户标识和密码传递给登录模块。我的想法是有一个Java脚本代码将ip地址附加到用户标识,然后调用表单提交。我只是没有正确的java脚本代码来做到这一点。你能帮我吗?JAAS tomcat登录模块可能的方法来传递IP地址

该网页有两个输入字段,j_userid和j_password,JAAS代码知道它看起来。那么在表单提交之前,我可以使用哪些javaScript代码将j地址添加到j_userid字段。我正在考虑'IP地址#用户ID',然后在我的登录模块中,我将IP地址从用户ID中取出。

回答

1

我创建了这两个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。

0

对不起,我不认为有一种方法可以在客户端以纯白的Javascript获得IP。

如果您不控制客户端和服务器之间的基础架构(负载均衡器,代理...),则在服务器端测试远程IP可能不是解决方案。 如果您确信远程IP是客户端的IP地址,您应该能够破解tomcat Valve或servlet过滤器。

+1

我可以使用JSF bean在隐藏字段的页面上获取IP地址。问题是传递给JAAS登录模块。 – Martlark 2009-07-29 22:44:06