Java WAR文件的指纹

Java WAR文件的指纹,java,war,Java,War,我正在编写一个可以包含在任何WAR中的JAR库,将日志数据发送到服务器(编辑:它是Log4j的一个appender)。为了以后对来自同一应用程序版本但来自不同服务器的日志进行分组,我想为WAR生成指纹/校验和 我考虑过使用类路径项和文件大小,但似乎找不出最好的方法 您将如何做?为什么不从Java SE中实现的WAR文件中创建MD5哈希和: byte[] warBytes; MessageDigest digest = java.security.MessageDigest.getInstance

我正在编写一个可以包含在任何WAR中的JAR库,将日志数据发送到服务器(编辑:它是Log4j的一个appender)。为了以后对来自同一应用程序版本但来自不同服务器的日志进行分组,我想为WAR生成指纹/校验和

我考虑过使用类路径项和文件大小,但似乎找不出最好的方法


您将如何做?

为什么不从Java SE中实现的WAR文件中创建MD5哈希和

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

请参阅Java和中的。

为什么不从Java SE中实现的WAR文件中创建MD5哈希和

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

请参阅Java和中的。

嗯,文件的加密哈希可能是最通用的解决方案。事实上,如果文件已签名,则散列已经存在,以签名的形式存在。(您不需要“验证”签名,只需认识到它是一个“唯一”标识符,在宇宙时代可能有一次或两次不是真正唯一的。)


如果文件没有签名,您仍然可以(适度地)使用java.security.MessageDigest轻松地计算哈希。

那么,文件的加密哈希可能是最通用的解决方案。事实上,如果文件已签名,则散列已经存在,以签名的形式存在。(您不需要“验证”签名,只需认识到它是一个“唯一”标识符,在宇宙时代可能有一次或两次不是真正唯一的。)


如果文件没有签名,您仍然可以(适度地)使用java.security.MessageDigest轻松计算哈希。

恐怕唯一可以接受的答案是:
如果没有不负责任的恶意黑客,这是不可能做到的。恐怕唯一可以接受的答案是:
如果没有不负责任的、令人讨厌的黑客,这是不可能做到的。

您可以在容器中找到JAR在战争中的文件位置(可能已解压缩),如下所示:

AClassInTheJar.class.getProtectionDomain().getCodeSource().getLocation().getPath()


显然,这是指纹识别的先兆。

您可以在容器中找到JAR在WAR中的文件位置(可能已解压缩),如下所示:

AClassInTheJar.class.getProtectionDomain().getCodeSource().getLocation().getPath()


显然,这是指纹识别的先兆。

相同的WAR文件可能部署到两台服务器上,我需要一个算法,为两个运行的实例抛出相同的校验和/指纹。它不是为了版本控制,只是为了区分。JAR中MANIFEST.MF的构建日期如何?不同于散列,它更“人性化”;这完全取决于容器;有些人在使用它之前先将其分解,然后从服务器上运行。那你怎么看待这场战争呢?这是不可知的。同一个WAR文件可能部署到2台服务器,我需要一个算法,为两个运行的实例抛出相同的校验和/指纹。它不是为了版本控制,只是为了区分。JAR中MANIFEST.MF的构建日期如何?不同于散列,它更“人性化”;这完全取决于容器;有些人在使用它之前先将其分解,然后从服务器上运行。那你怎么看待这场战争呢?它是不可知论的。WAR文件中的库允许这样做吗?我想他的问题是从代码中找到WAR文件。jar不知道它在哪里。Java程序基本上可以使用适当的权限访问文件系统上的任何文件(Unix)@Joeri这当然是一个问题,然后您需要初始化jar或通过ClassLoader进行智能查找,我想。WAR文件中的库可以这样做吗?我想他的问题是从代码中找到WAR文件。jar不知道它在哪里。Java程序基本上可以使用适当的权限(Unix)@Joeri访问文件系统上的任何文件。当然,这是一个问题,然后你需要初始化jar,或者通过类加载器进行巧妙的查找。你如何定位WAR文件?我的意思是图书馆在里面运行,它怎么知道“它在哪里”?好问题。我对WAR文件的处理方式不太熟悉(可能会因为使用它们的平台而异)。我知道您通常可以通过查看类的类加载器,然后查询该类加载器的搜索路径来定位包含类的JAR文件,但我不知道这个一般概念是否会延续到WAR文件中。您如何定位WAR文件?我的意思是图书馆在里面运行,它怎么知道“它在哪里”?好问题。我对WAR文件的处理方式不太熟悉(可能会因为使用它们的平台而异)。我知道您通常可以通过查看类的类加载器,然后查询该类加载器的搜索路径来定位包含类的JAR文件,但我不知道这个一般概念是否适用于WAR文件。