Java 当我使用字符串构造函数将字节[]转换为字符串时,代码会有异味
这是我将JWT对象解码为字符串的函数:Java 当我使用字符串构造函数将字节[]转换为字符串时,代码会有异味,java,base64,Java,Base64,这是我将JWT对象解码为字符串的函数: protected String decodeJWT(String idToken){ String[] splitString = idToken.split("\\."); String base64EncodedBody = splitString[1]; Base64 base64Url = new Base64(true); String idTokenString = new St
protected String decodeJWT(String idToken){
String[] splitString = idToken.split("\\.");
String base64EncodedBody = splitString[1];
Base64 base64Url = new Base64(true);
String idTokenString = new String(base64Url.decode(base64EncodedBody));
StringBuilder sub = new StringBuilder();
int indexStart = idTokenString.indexOf("\"sub\":\"") + 7;
char c;
while((c = idTokenString.charAt(indexStart)) != '\"') {
indexStart++;
sub.append(c);
}
return sub.toString();
}
SonarCloud在转换base64Url.decode(base64EncodedBody)
时检测到代码气味,即字符串上的字节[]
。
这就是问题所在:
构造函数不应用于实例化“字符串”,
“BigInteger”、“BigDecimal”和基本包装类
String、BigInteger、BigDecimal和用于包装的对象的构造函数
不应使用原语。这样做不太清楚,而且使用更多
而不是在字符串的情况下简单地使用所需的值
将valueOf用于其他一切
如何解决此代码气味?使用此构造函数
String(byte bytes[],Charset Charset)
constructor
因此,可以根据需要更改代码
String s = new String(base64Url.decode(base64EncodedBody), StandardCharsets.UTF_8);
提及
使用具有byte[]参数但没有Charset参数的字符串构造函数
轻微的代码气味