0

我要求只允许一个用户使用一个登录 ID 和密码登录,这意味着不允许两个用户使用相同的用户名和 ID 登录。所以我想在我的 Db 中创建一个字段来存储ipaddress.假设 A 已经登录,那么他的 ip 地址将存储在 Db 中,现在如果 B 想登录,那么他将收到警报,该用户已经登录并且 ip 地址是 A 的 ipaddress。为此我正在使用

    <%@ page import="java.net.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%

out.println("remote address  "+request.getRemoteAddr());
 out.println("remote host  "+request.getRemoteHost());
 out.println("remote port "+request.getRemotePort());
 out.println("remote user  "+request.getRemoteUser());
//out.println(InetAddress.getLocalHost().getHostAddress());
out.println(request.getRemoteAddr());
//out.println(InetAddress.getLocalHost().getHostAddress().toString());
%>
</body>
</html>

但我没有得到确切的 ipaddress。请告诉我如何获取 ipaddress。如果您认为这种将 ipadddress 存储在 Db 中并提醒重复用户的方式是不明智的,那么也欢迎您的建议

remote address 0:0:0:0:0:0:0:1 remote host 0:0:0:0:0:0:0:1 remote port 38059 remote user null 0:0:0:0:0:0:0:1
4

1 回答 1

0

出于某种原因,request.getRemoteAddr()对您不起作用。在不了解您所在公司的网络的情况下,很难说出原因。

但是,您甚至不需要 IP 地址。如果用户当前已登录,只需保留一个标志:

User | logged in?
-----+------------
 A   |    Yes
 B   |    No
 C   |    No

现在,如果用户尝试登录,请检查他/她是否已经登录。如果是,则显示错误消息并避免登录。

您需要重置此标志

  • 当用户注销时(单击“注销”按钮)
  • 会话超时后(您可以为此使用HttpSessionListener),以防用户没有单击“注销”。注意:如果您的会话超时时间较长(例如 30 分钟),并且用户忘记单击“注销”,他/她将无法在剩余的会话中登录。
  • 重新部署应用程序后,如果所有会话都被销毁。
于 2013-05-02T05:48:38.357 回答