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

This commit is contained in:
yukaidi
2026-05-29 02:48:13 +08:00
parent 5a08ed68c2
commit 79c9eb3dda

View File

@@ -109,9 +109,9 @@ public class FjTool extends PanBase {
// String uuid = UUID.randomUUID().toString().toLowerCase(); // 也可以使用 UUID.randomUUID().toString() // String uuid = UUID.randomUUID().toString().toLowerCase(); // 也可以使用 UUID.randomUUID().toString()
static String token = null; static volatile String token = null;
static String userId = null; static volatile String userId = null;
public static boolean authFlag = true; public static volatile boolean authFlag = true;
public FjTool(ShareLinkInfo shareLinkInfo) { public FjTool(ShareLinkInfo shareLinkInfo) {
super(shareLinkInfo); super(shareLinkInfo);
@@ -289,12 +289,14 @@ public class FjTool 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");
header0.set("appToken", token); MultiMap h0 = MultiMap.caseInsensitiveMultiMap();
h0.addAll(header0);
h0.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())));
client.postAbs(UriTemplate.of(TOKEN_VERIFY_URL)) client.postAbs(UriTemplate.of(TOKEN_VERIFY_URL))
.setTemplateParam("uuid", uuid) .setTemplateParam("uuid", uuid)
.setTemplateParam("ts", tsEncode2) .setTemplateParam("ts", tsEncode2)
.putHeaders(header0).send().onSuccess(res -> { .putHeaders(h0).send().onSuccess(res -> {
if (asJson(res).getInteger("code") == 200) { if (asJson(res).getInteger("code") == 200) {
if (FjTool.userId == null) { if (FjTool.userId == null) {
FjTool.userId = asJson(res).getJsonObject("map").getString("userId"); FjTool.userId = asJson(res).getJsonObject("map").getString("userId");