Отпечаток файла WAR Java - PullRequest
1 голос
/ 28 июля 2011

Я пишу библиотеку JAR, которая может быть включена в любую WAR, отправляя данные журнала на сервер ( EDIT: это приложение для Log4j ).Чтобы позже сгруппировать журналы, которые исходили из одной и той же версии приложения, но пришли с разных серверов, Я хочу сгенерировать отпечаток пальца / контрольную сумму для WAR .

. Я подумал об использовании элементов classpath.и размеры файлов - но просто не могу понять, как лучше.

Как бы вы это сделали?

Ответы [ 4 ]

1 голос
/ 10 октября 2013

Вы можете найти, с некоторым отклонением для контейнеров, местоположение файла для JAR в WAR (может быть, разархивировано) следующим образом:

AClassInTheJar.class.getProtectionDomain (). GetCodeSource (). GetLocation ().getPath ();

Очевидно, это предвестник его дактилоскопии.

0 голосов
/ 28 июля 2011

Ну, криптографический хеш файла - это, вероятно, самое общее решение.И, на самом деле, если файл подписан, хэш уже существует, в форме подписи.(Вам не нужно «проверять» подпись, просто признайте, что это «уникальный» идентификатор, который может раз или два в эпоху юниверса не быть действительно уникальным.)

Если файл не является 'Если вы подписали, вы все еще можете (в меру) легко вычислить хеш, используя java.security.MessageDigest.

0 голосов
/ 18 августа 2011

Боюсь, единственный приемлемый ответ: это не может быть сделано без безответственных мерзких хаков.

0 голосов
/ 28 июля 2011

Почему бы вам не создать хэш-сумму MD5 из WAR-файла , который реализован в Java SE:

byte[] warBytes;
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(warBytes);
byte[] hash = digest.digest();

См. Быстрая реализация MD5 в Java и Java SE API .

...