fix: IzToolWithAuth 并发安全 - token/authFlag 改为 volatile,header 副本替代共享修改

This commit is contained in:
yukaidi
2026-05-29 02:49:01 +08:00
parent 79c9eb3dda
commit aef1b9ab11

View File

@@ -88,8 +88,8 @@ public class IzToolWithAuth extends PanBase {
String uuid = UUID.randomUUID().toString().toLowerCase(); // 也可以使用 UUID.randomUUID().toString() String uuid = UUID.randomUUID().toString().toLowerCase(); // 也可以使用 UUID.randomUUID().toString()
public static String token = null; public static volatile String token = null;
public static boolean authFlag = true; public static volatile boolean authFlag = true;
public Future<String> parse() { public Future<String> parse() {
@@ -216,7 +216,7 @@ public class IzToolWithAuth extends PanBase {
log.warn("登录失败: {}", failRes.getMessage()); log.warn("登录失败: {}", failRes.getMessage());
fail(failRes.getMessage()); fail(failRes.getMessage());
}).onSuccess(r-> { }).onSuccess(r-> {
httpRequest.setTemplateParam("appToken", header.get("appToken")) httpRequest.setTemplateParam("appToken", token)
.putHeaders(header); .putHeaders(header);
httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2")); httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2"));
}); });
@@ -232,12 +232,12 @@ public class IzToolWithAuth extends PanBase {
log.warn("重新登录失败: {}", failRes.getMessage()); log.warn("重新登录失败: {}", failRes.getMessage());
fail(failRes.getMessage()); fail(failRes.getMessage());
}).onSuccess(r-> { }).onSuccess(r-> {
httpRequest.setTemplateParam("appToken", header.get("appToken")) httpRequest.setTemplateParam("appToken", token)
.putHeaders(header); .putHeaders(header);
httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2")); httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2"));
}); });
} else { } else {
httpRequest.setTemplateParam("appToken", header.get("appToken")) httpRequest.setTemplateParam("appToken", token)
.putHeaders(header); .putHeaders(header);
httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2")); httpRequest.send().onSuccess(this::down).onFailure(handleFail("请求2"));
} }
@@ -280,7 +280,9 @@ public class IzToolWithAuth extends PanBase {
JsonObject json = asJson(res2); JsonObject json = asJson(res2);
if (json.getInteger("code") == 200) { if (json.getInteger("code") == 200) {
token = json.getJsonObject("data").getString("appToken"); token = json.getJsonObject("data").getString("appToken");
header.set("appToken", token); MultiMap h = MultiMap.caseInsensitiveMultiMap();
h.addAll(header);
h.set("appToken", token);
log.info("登录成功 token: {}...", token.substring(0, Math.min(8, token.length()))); log.info("登录成功 token: {}...", token.substring(0, Math.min(8, token.length())));
promise1.complete(); promise1.complete();
} else { } else {