Java WebStart应用程序如何获取访问我的网页的MAC地址

Hai*_* Bi 6 java mac-address java-web-start web

我正在编写一个java webstart应用程序来从网站部署,以便用户可以单击并运行我的软件.我需要一种独特的机器识别,以避免滥用文件的访问.我想使用客户端的MAC地址作为唯一密钥,以便服务器可以确保没有客户端下载太多.

当然,用户可能有多个网卡,那么我的Java应用程序如何确定用户用来访问我的网站的网卡的MAC地址?

And*_*son 7

..机器识别..

为什么不做一种"会话识别"呢?作为每个应用.加载(您可能希望实现SingleInstanceService每个PC强制执行一个应用程序.)让它联系服务器以建立唯一的会话.用它来识别每个请求.

阻止用户"用完"他们的津贴并停止/重新启动应用程序.(在一个时间限制内),使用以下内容存储一些细节PersistenceService.


Dr.*_*ibo 6

您可以使用java.net.NetworkInterface.getNetworkInterfaces获取网络接口,并在它们上调用getHardwareAddress()以获取MAC地址.

您可能希望使用if.isLoopBack()过滤掉环回(其中"if"是接口对象).还过滤掉if.getHardwareAddress()返回null的任何接口.然后挑出一个.您可以按名称if.getName()对它们进行排序,然后取第一个.出于您的目的,它是否是用于下载文件的实际界面并不重要,只是您可以以某种方式识别计算机.最后,if.getHardwareAddress()为您提供了一个包含MAC地址的字节数组.如果您更愿意使用String,请使用"%02x".format(byte)格式化每个字节,并使用":"作为分隔符将它们连接起来.

正如在另一个答案中所建议的那样,使用PersistenceService可能更好.

但是,如果要在每台计算机上具有相同文件/ homedirs的情况下在不同计算机上为同一用户保留不同数据,则使用MAC地址可能很有用.您可以将MAC地址用作传递给PersistenceService#create()和get()的URL的一部分.如果您需要每台计算机数据而不是每用户数据,则非常有用.

简短示例Scala代码:

def computerID: String = {
  try { // mac address of first network interface
    return java.net.NetworkInterface.getNetworkInterfaces
    .filter(!_.isLoopback)
    .filter(_.getHardwareAddress != null)
    .toList.sortBy(_.getName).head
    .getHardwareAddress.map("%02x".format(_)).mkString(":")
  } catch {
    case _ => return "0" // no mac address available? use default "0"
  }
}
Run Code Online (Sandbox Code Playgroud)