如何解决安全漏洞?
它显示客户端中的以下错误。如何解决?
java.lang.SecurityException异常:类 “org.apache.commons.io.output.ByteArrayOutputStream”的签名者 信息与其他类的签名者信息不匹配 相同的包
答案 0 :(得分:0)
你的类路径中有多个包含相同类的Jars。其中一个或多个已签名。如果Jar已签名,如果一个类来自一个Jar而另一个类来自另一个类,则可能会出现此错误。这种情况大部分时间都会发生,如果你有不同版本的Jars或者将其他库的类添加到自己的Jar中的库。
找到罪魁祸首并修复它,并不是一个简单的过程。到目前为止,我发现的最简单的方法是在bash-shell的for循环中使用grep
和jar tf
。这显然意味着你需要一个Unix系统或Cygwin:
for i in *.jar; do
jar tf "$i" | grep ByteArrayOutputStream | grep -c commons > /dev/null && echo "$i"
done
Powershell可能会带来类似的功能,但我不知道Powershell。
这个简短的脚本输出所有的jar,包含一类包 .commons。 .ByteArrayOutputStream。在我的例子中,只输出了commons-io-1.0.jar但你应该看到多个文件名。下一步是找出这些特殊罐子在你的类路径中的原因,并决定下一步,比如删除其中一个罐子等。