Java Base64解码HTTP请求Authorization头部异常问题咨询
问题分析与解决
嘿,这个坑很多Java新手都踩过!你看到的[B@16d9ea61根本不是解码失败,而是字节数组的默认toString()输出,和你要的明文凭证完全不是一回事~
问题根源
Base64.getDecoder().decode()方法返回的是byte[](字节数组)类型,直接调用它的toString()方法,Java并不会把字节转换成对应的字符串,而是输出这个数组对象的内存哈希标识——格式就是[B(代表字节数组类型)加上@和十六进制的哈希值,也就是你看到的结果。
修正后的代码
你需要把解码得到的字节数组通过String的构造器转换成字符串,最好还指定字符编码(比如UTF-8),避免因系统默认编码差异导致乱码:
// 提取Authorization头部中的Base64编码部分 String authBase64 = request.getHeader("Authorization").split(" ")[1]; // 解码字节数组并转换为字符串(指定UTF-8编码更稳妥) String valueDecoded = new String(Base64.getDecoder().decode(authBase64), StandardCharsets.UTF_8); System.out.println(valueDecoded); // 此时会正确输出monLogin:monMotDePass
额外提示
如果你的项目是Java 8及以上,StandardCharsets.UTF_8是内置的常量,不用额外导入;如果是更老的版本,可以用"UTF-8"字符串代替,但记得处理UnsupportedEncodingException异常哦。
内容的提问来源于stack exchange,提问作者user54517
相关产品推荐
相关产品推荐

