【问题标题】: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
相关资源
最近更新 更多