From 7f955a537e0d6ff7f1cd2176c404b33774a67977 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Thu, 4 Mar 2021 23:34:30 +0800 Subject: [PATCH] fix one time http api support. #1655 --- .../core/shell/term/impl/http/api/HttpApiHandler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/taobao/arthas/core/shell/term/impl/http/api/HttpApiHandler.java b/core/src/main/java/com/taobao/arthas/core/shell/term/impl/http/api/HttpApiHandler.java index 122a6597c..163fa5932 100644 --- a/core/src/main/java/com/taobao/arthas/core/shell/term/impl/http/api/HttpApiHandler.java +++ b/core/src/main/java/com/taobao/arthas/core/shell/term/impl/http/api/HttpApiHandler.java @@ -56,6 +56,7 @@ import java.util.concurrent.TimeUnit; public class HttpApiHandler { private static final Logger logger = LoggerFactory.getLogger(HttpApiHandler.class); + private static final String ONETIME_SESSION_KEY = "oneTimeSession"; public static final int DEFAULT_EXEC_TIMEOUT = 30000; private final SessionManager sessionManager; private final InternalCommandManager commandManager; @@ -228,6 +229,12 @@ public class HttpApiHandler { sessionManager.updateAccessTime(session); } + // 标记所谓的一次性session + if (session == null) { + session = sessionManager.createSession(); + session.put(ONETIME_SESSION_KEY, new Object()); + } + // 请求到达这里,如果有需要鉴权,则已经在前面的handler里处理过了 // 如果有鉴权取到的 Subject,则传递到 arthas的session里 HttpSession httpSession = HttpSessionManager.getHttpSessionFromContext(ctx); @@ -376,9 +383,8 @@ public class HttpApiHandler { */ private ApiResponse processExecRequest(ApiRequest apiRequest, Session session) { boolean oneTimeAccess = false; - if (session == null) { + if (session.get(ONETIME_SESSION_KEY) != null) { oneTimeAccess = true; - session = sessionManager.createSession(); } try {