【问题标题】:org.apache.commons.codec.digest.Md5Crypt.md5Crypt function. exception occured under linux, but fine under windowsorg.apache.commons.codec.digest.Md5Crypt.md5Crypt 函数。 linux下出现异常,windows下正常
【发布时间】:2015-12-24 17:59:41
【问题描述】:

我们使用commons-codec 来加密密码,使用org.apache.commons.codec.digest.Md5Crypt.md5Crypt 函数。

在 Windows 环境下可以正常工作,但在 CentOS 上会抛出异常。

我们有3台centOS测试服务器:一台是centOS7,一台是centOS6.7,一台是centOS7 minimum。 最奇怪的是,该代码在 centOS7 服务器上运行,而在其他两个服务器上却不行。它们之间的唯一区别是操作系统。相同的 tomcat,相同的 jdks,相同的构建。

在linux下还需要什么别的东西吗?

异常信息:

java.lang.IllegalAccessError: tried to access method org.apache.commons.codec.digest.DigestUtils.getMd5Digest()Ljava/security/MessageDigest; from class org.apache.commons.codec.digest.Md5Crypt

【问题讨论】:

    标签: java apache-commons-codec


    【解决方案1】:

    你检查过罐子吗?和图书馆的存在?也许是因为一些晦涩难懂的安全/专利/出口原因而被删除?

    或者,至少,发生了一些变化。这是一个不兼容的问题:请参阅: java.lang.IllegalAccessError: tried to access method

    或者你已经(加载)了这个类,因为你有多个不兼容的实例。尝试在你的包中找到它(调用函数,或被调用)

    但是为什么不直接使用这个库呢?

    import java.security.*;
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] thedigest = md.digest(_originebyte);
    

    【讨论】:

    • 感谢您的回答。我检查了你提到的问题,然后我再次检查了我的环境的每个细节,发现三个tomcat的版本不同。 jdks 的版本是 1.7,但 tomcat 的版本是 8 和 7。8 对代码工作正常,但 7 不行。所以现在我把tomcats从7改到8了。但是我还是很困惑,是什么造成了这种情况,我再深入挖掘一下。
    • 嗨,你是对的,我发现一个不同的 commons-codec 包含在 WEB-INF/lib 文件夹中的第三方 jar 文件中,它不是由 maven 管理的。我删除了它,现在它可以正常工作了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2015-03-27
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多