【问题标题】:java.lang.NoClassDefFoundError: sun/misc/BASE64Encoderjava.lang.NoClassDefFoundError: sun/misc/BASE64Encoder
【发布时间】:2015-04-17 06:46:36
【问题描述】:

我想用 java 代码连接一些域。我可以在浏览器中连接域,如下所示: http://username:password@domain.com

我尝试了以下方法:

    String enc = "username" + ":" + "password";
            String encoded = new sun.misc.BASE64Encoder().encode(loginPassword.getBytes());
URL url = new URL("domain.com");
            URLConnection conn = url.openConnection();
            conn.setRequestProperty ("Authorization", "Basic " + encoded);

我收到错误:401/Unutorized... java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

有什么我可以尝试的解决方案吗?

【问题讨论】:

  • 使用不同的 Base64Encoder 类。

标签: java http


【解决方案1】:

Oracle 在 Java 9 中有 announced the removal 的这些类。

您不应该使用 sun.* 包中的类 - 这些类不是 Java 的公共 API 的一部分,并且可以在任何新的 Java 版本中更改。

请参阅 Oracle 文档中的 Why Developers Should Not Write Programs That Call 'sun' Packages。

而不是使用类sun.misc.BASE64Encoder:

如果您使用的是 Java 8,则使用类 java.util.Base64 进行 Base 64 编码和解码。

否则,请使用第三方库,例如 org.apache.commons.codec.binary.Base64 中的 Apache Commons Codec 类。

【讨论】:

  • 谢谢。使用 org.apache.commons.codec.binary.Base64 已经解决了这个问题。
猜你喜欢
  • 2020-08-02
  • 2018-04-27
  • 2018-04-23
  • 2020-06-26
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 2013-12-16
  • 2018-08-13
相关资源
最近更新 更多