Как приложение Java WebStart Получить MAC-адрес для доступа к моей веб-странице - PullRequest
6 голосов
/ 11 января 2012

Я пишу Java-приложение для запуска с веб-сайта, чтобы пользователи могли щелкнуть и запустить мое программное обеспечение. Мне нужно иметь своего рода уникальную идентификацию машины, чтобы не злоупотреблять доступом к файлам. Я хотел бы использовать MAC-адрес клиента в качестве уникального ключа, чтобы сервер мог гарантировать, что ни один клиент не загружает слишком много.

Конечно, у пользователя может быть несколько сетевых карт, так как мое приложение Java может определить MAC-адрес сетевой карты, которую пользователь использует для доступа к моему веб-сайту?

Ответы [ 2 ]

7 голосов
/ 11 января 2012

.. идентификация машины ..

Почему бы вместо этого не сделать своего рода «идентификацию сеанса»? Как и каждое приложение. загружает (может потребоваться реализовать SingleInstanceService для принудительного применения одного приложения на ПК.), чтобы он связался с сервером для установления уникального сеанса. Используйте это, чтобы идентифицировать его для каждого запроса.

Чтобы помешать пользователю «использовать» его допуск и остановить / перезапустить приложение. (в течение определенного времени) сохраните некоторые данные, используя PersistenceService.

6 голосов
/ 12 января 2012

Вы можете использовать java.net.NetworkInterface.getNetworkInterfaces для получения сетевых интерфейсов и вызывать getHardwareAddress () для них, чтобы получить MAC-адрес.

Вы можете захотеть отфильтровать обратную петлю с помощью if.isLoopBack () (где «if» - объект интерфейса). Также отфильтруйте любой интерфейс, где if.getHardwareAddress () возвращает ноль. Затем выберите один. Вы можете отсортировать их по имени if.getName () и взять первый. Для ваших целей не имеет значения, является ли это фактическим интерфейсом, используемым для загрузки ваших файлов, или нет, просто вы можете как-то идентифицировать компьютер. Наконец, if.getHardwareAddress () выдает массив байтов с MAC-адресом. Если вы предпочитаете использовать строку, отформатируйте каждый байт с помощью «% 02x» .format (byte) и соедините их с разделителем «:».

Как предлагается в другом ответе, может быть лучше использовать PersistenceService.

Однако использование MAC-адреса может быть полезно, если вы хотите сохранить разные данные для одного и того же пользователя на разных компьютерах в случае, когда у пользователя есть одинаковые файлы / домашние каталоги на каждом компьютере. Вы можете использовать MAC-адрес как часть URL-адреса, который вы передаете PersistenceService # create () и get (). Полезно, если вам нужны данные для каждого компьютера, а не для каждого пользователя.

Краткий пример 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"
  }
}
...