我一直在寻找一种方法,将客户端 ip 以及用户 ID 和密码从 JAAS 登录页面传递到我的 Web 代码中的 JAAS 登录模块实现。 JAAS 只允许将用户标识和密码传递给登录模块。我的想法是有一个 java 脚本代码将 ip 地址附加到用户 id,然后调用表单提交。我只是没有正确的 java 脚本代码来执行此操作。你能帮忙吗?
该网页有两个输入字段,j_userid 和 j_password,JAAS 代码知道要查看它们。那么在表单提交之前,我可以使用什么 javaScript 代码将 ip 地址添加到 j_userid 字段。我在考虑“ip-address#userid”,然后在我的登录模块中我会从 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 地址放入隐藏字段的 bean。 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#userid。
关于java - JAAS tomcat 登录模块传递 ip 地址的可能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200091/