fix: 修复质量插件在 Java 21 下不可用,并修复 SpotBugs 发现的空指针风险
- checkstyle: 升级至 3.6.0,新增 checkstyle.xml 基础规则,绑定 verify 阶段 - findbugs: 替换为 spotbugs-maven-plugin 4.8.6.6(FindBugs 已停止维护且无法解析 Java 21 字节码), 绑定 verify 阶段,新增 spotbugs-exclude.xml 排除遗留命名等检查 - javadoc: 升级至 3.12.0(3.12.1 在中央仓库不存在),禁用 doclint - 修复 SpotBugs 发现的问题:压缩/解压方法中 getFileName()/getParent() 可能为 null 的防御, 共享 SecureRandom 实例避免重复创建
This commit is contained in:
1 parent
28eaccf35f
commit
6c843c4030
5 files changed
+115
-11
No files matched your search
@@ -52,7 +52,11 @@ public class compress {
|
||||
if (entry.isDirectory()) {
|
||||
Files.createDirectories(targetPath);
|
||||
} else {
|
||||
Files.createDirectories(targetPath.getParent());
|
||||
Path parent = targetPath.getParent();
|
||||
if (parent == null) {
|
||||
throw new IllegalArgumentException("无法确定条目父目录: " + entry.getName());
|
||||
}
|
||||
Files.createDirectories(parent);
|
||||
Files.copy(tarIn, targetPath);
|
||||
}
|
||||
}
|
||||
@@ -115,7 +119,11 @@ public class compress {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
TarArchiveEntry entry = new TarArchiveEntry(sourcePath, sourcePath.getFileName().toString());
|
||||
Path fileName = sourcePath.getFileName();
|
||||
if (fileName == null) {
|
||||
throw new IllegalArgumentException("无法从源路径获取文件名: " + sourcePath);
|
||||
}
|
||||
TarArchiveEntry entry = new TarArchiveEntry(sourcePath, fileName.toString());
|
||||
tarOut.putArchiveEntry(entry);
|
||||
Files.copy(sourcePath, tarOut);
|
||||
tarOut.closeArchiveEntry();
|
||||
@@ -164,7 +172,11 @@ public class compress {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ZipArchiveEntry entry = new ZipArchiveEntry(sourcePath.getFileName().toString());
|
||||
Path fileName = sourcePath.getFileName();
|
||||
if (fileName == null) {
|
||||
throw new IllegalArgumentException("无法从源路径获取文件名: " + sourcePath);
|
||||
}
|
||||
ZipArchiveEntry entry = new ZipArchiveEntry(fileName.toString());
|
||||
zipOut.putArchiveEntry(entry);
|
||||
Files.copy(sourcePath, zipOut);
|
||||
zipOut.closeArchiveEntry();
|
||||
@@ -200,7 +212,11 @@ public class compress {
|
||||
if (entry.isDirectory()) {
|
||||
Files.createDirectories(targetPath);
|
||||
} else {
|
||||
Files.createDirectories(targetPath.getParent());
|
||||
Path parent = targetPath.getParent();
|
||||
if (parent == null) {
|
||||
throw new IllegalArgumentException("无法确定条目父目录: " + entry.getName());
|
||||
}
|
||||
Files.createDirectories(parent);
|
||||
Files.copy(zipIn, targetPath);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -53,6 +53,9 @@ public class EncryptionAndDecryption {
|
||||
private static final String DES_ECB = "DES/ECB/PKCS5Padding";
|
||||
private static final String RSA_WRAP = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding";
|
||||
|
||||
/** 共享的安全随机数发生器,避免每次加密都新建 SecureRandom 实例 */
|
||||
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
|
||||
|
||||
/**
|
||||
* 文件加密。加密后覆盖原文件(原子替换),密钥保存到 keyPath 目录下,密钥名为 原文件名.key。
|
||||
*
|
||||
@@ -135,7 +138,7 @@ public class EncryptionAndDecryption {
|
||||
|
||||
private static void encryptAesGcm(File file, SecretKey key) throws Exception {
|
||||
byte[] iv = new byte[GCM_IV_BYTES];
|
||||
new SecureRandom().nextBytes(iv);
|
||||
SECURE_RANDOM.nextBytes(iv);
|
||||
Cipher cipher = buildCipher(AES_GCM, Cipher.ENCRYPT_MODE, key, new GCMParameterSpec(GCM_TAG_BITS, iv));
|
||||
|
||||
Path tmp = tempSibling(file);
|
||||
@@ -172,7 +175,7 @@ public class EncryptionAndDecryption {
|
||||
// 随机 AES-256 会话密钥,RSA-OAEP 包裹后存入文件头
|
||||
SecretKey sessionKey = generateKey("AES", AES_KEY_BITS);
|
||||
byte[] iv = new byte[GCM_IV_BYTES];
|
||||
new SecureRandom().nextBytes(iv);
|
||||
SECURE_RANDOM.nextBytes(iv);
|
||||
|
||||
Cipher wrapCipher = Cipher.getInstance(RSA_WRAP);
|
||||
wrapCipher.init(Cipher.WRAP_MODE, publicKey);
|
||||
@@ -279,6 +282,9 @@ public class EncryptionAndDecryption {
|
||||
*/
|
||||
private static Path tempSibling(File file) throws IOException {
|
||||
Path dir = file.toPath().toAbsolutePath().getParent();
|
||||
if (dir == null) {
|
||||
throw new IOException("无法确定文件所在目录: " + file);
|
||||
}
|
||||
return Files.createTempFile(dir, file.getName() + ".", ".tmp");
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user