我正在编写一个可以包含在任何WAR中的JAR库,将日志数据发送到服务器(编辑:它是Log4j 的附加器)。为了稍后对来自相同应用程序版本但来自不同服务器的日志进行分组,我想为WAR生成指纹/校验和。
我考虑过使用类路径项和文件大小 - 但似乎无法找出最佳方法。
你会怎么做?
答案 0 :(得分:1)
对于容器的一些差异,您可以找到WAR中JAR的文件位置(可能是解压缩的),如下所示:
AClassInTheJar.class.getProtectionDomain()getCodeSource()的getLocation()的getPath(); ...
显然,这是指纹识别的先驱。
答案 1 :(得分:0)
为什么不在Java SE中实现的 WAR文件中创建 MD5哈希值:
byte[] warBytes;
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(warBytes);
byte[] hash = digest.digest();
请参阅Java中的Fast MD5 implementation和Java SE API。
答案 2 :(得分:0)
嗯,文件的加密哈希值可能是最常用的解决方案。而且,实际上,如果文件已签名,则哈希已经存在,以签名的形式存在。 (您不需要“验证”签名,只需认识到它是一个“唯一”标识符,在宇宙时代可能只有一两次不是真正独特的。)
如果文件未签名,您仍然可以(适度)使用java.security.MessageDigest轻松计算哈希值。
答案 3 :(得分:0)
我担心唯一可以接受的答案是: 如果没有不负责任,讨厌的黑客行为,就无法做到。