我有一个在局域网中运行的spring MVC应用程序。在那里客户机IP地址不时变化。因此,我想获取客户端计算机名称(他们的计算机名称是固定的),因为我想获取客户端计算机的详细信息而不创建登录。
这有可能获得客户端机器的名称吗?如果可能的话怎么样? 或者是否有其他方式来获取用户详细信息
编辑: 到目前为止我尝试过的代码
在HttpServlet中
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String hostname = request.getRemoteUser(); //this gives null
String hostname = request.getRemoteHost(); //This gives host machine name
}
编辑:回复@Eugeny Loy 在web.xml中
<init-param>
<param-name>jcifs.smb.client.username</param-name>
<param-value>username</param-value>
</init-param>
在serverlet类
中String username = config.getInitParameter("username");//This gives client IP address
答案 0 :(得分:1)
我找到了获取客户端计算机名称的方法。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
Logger.getLogger(this.getClass()).warning("Inside Confirm Servlet");
response.setContentType("text/html");
String hostname = request.getRemoteHost(); // hostname
System.out.println("hostname"+hostname);
String computerName = null;
String remoteAddress = request.getRemoteAddr();
System.out.println("remoteAddress: " + remoteAddress);
try {
InetAddress inetAddress = InetAddress.getByName(remoteAddress);
System.out.println("inetAddress: " + inetAddress);
computerName = inetAddress.getHostName();
System.out.println("computerName: " + computerName);
if (computerName.equalsIgnoreCase("localhost")) {
computerName = java.net.InetAddress.getLocalHost().getCanonicalHostName();
}
} catch (UnknownHostException e) {
}
System.out.println("computerName: " + computerName);
}
答案 1 :(得分:0)
是否可以获取客户端计算机的名称?
您可能在这里指的是NetBIOS名称。如果是这种情况 - 您应该使用一些在java中实现NetBIOS / SMB / CIFS的库来执行此操作。
如果有可能怎么做?
查看JCIFS。我不会给你确切的代码片段,但这是你应该采取的方向来解决这个问题。
或者是否有其他方法可以获取该用户详细信息
据我了解你的问题,你需要的是一种识别主机的方法,你不能依赖IP地址。
如果是这种情况,其他选项之一将使用MAC地址,但你可能无法用纯java执行此操作,因为这是java通常处理的更低级协议,所以它可能会便携性差。 This tutorial可能有帮助。
<强>更新强>
我遇到过NetBIOS / SMB / CIFS堆栈,但我还没有使用它在Java和JCIFS中使用 。这就是为什么我不会给你特定的代码片来解决你的问题,而是指向你应该看的方向。
查看NbtAddress课程文档。似乎是你在寻找什么。另请查看examples以了解如何使用它。