我正在编写一个
java webstart应用程序来从网站部署,以便用户可以单击并运行我的软件.我需要一种独特的机器识别,以避免滥用文件的访问.我想使用客户端的MAC地址作为唯一密钥,以便服务器可以确保没有客户端下载太多.
解决方法
您可以使用java.net.NetworkInterface.getNetworkInterfaces获取网络接口,并在它们上调用getHardwareAddress()以获取MAC地址.
您可能希望使用if.isLoopBack()过滤掉环回(其中“if”是接口对象).还过滤掉if.getHardwareAddress()返回null的任何接口.然后挑出一个.您可以按名称if.getName()对它们进行排序,然后取第一个.出于您的目的,它是否是用于下载文件的实际界面并不重要,只是您可以以某种方式识别计算机.最后,if.getHardwareAddress()为您提供了一个包含MAC地址的字节数组.如果您更喜欢使用String,请使用“?x”.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" } }