From 8454e09412d15f6ea180ec0cb4817ef44a500ecb Mon Sep 17 00:00:00 2001 From: Zhoujie628 Date: Mon, 17 Aug 2026 15:46:45 +0800 Subject: [PATCH] fix: support classpath: prefix in AgentAuthManager credential loading AgentAuthManager.loadFromFile() used new File(path) which does not understand the classpath: prefix. When SpringWorkbenchExecutor passed 'classpath:spn_agent_credentials.json', the file was silently not found and no credentials were loaded, resulting in missing Authorization headers. Fix: detect classpath: prefix and use ClassLoader.getResourceAsStream(). Also add warn logs for missing files (previously silent). Added 2 test cases: - loadsCredentialsFromClasspathPrefix - missingClasspathResourceDoesNotCreateCredentials Signed-off-by: Zhoujie628 --- .../engine/client/AgentAuthManager.java | 34 ++++++++++++++----- .../engine/client/AgentAuthManagerTest.java | 21 ++++++++++++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/workflow-engine/src/main/java/dev/openan/workflow/engine/client/AgentAuthManager.java b/workflow-engine/src/main/java/dev/openan/workflow/engine/client/AgentAuthManager.java index 65368909..ee66267c 100644 --- a/workflow-engine/src/main/java/dev/openan/workflow/engine/client/AgentAuthManager.java +++ b/workflow-engine/src/main/java/dev/openan/workflow/engine/client/AgentAuthManager.java @@ -75,15 +75,33 @@ private static Map>> loadFromFile(String if (path == null) { return new HashMap<>(); } - File file = new File(path); - if (!file.exists()) { - return new HashMap<>(); - } try { - Map>> loaded = - mapper.readValue( - file, - new TypeReference>>>() {}); + Map>> loaded; + if (path.startsWith("classpath:")) { + String resource = path.substring("classpath:".length()); + java.io.InputStream is = + AgentAuthManager.class.getClassLoader().getResourceAsStream(resource); + if (is == null) { + log.warn("[Auth] Classpath resource not found: {}", resource); + return new HashMap<>(); + } + loaded = + mapper.readValue( + is, + new TypeReference< + Map>>>() {}); + } else { + File file = new File(path); + if (!file.exists()) { + log.warn("[Auth] Credentials file not found: {}", path); + return new HashMap<>(); + } + loaded = + mapper.readValue( + file, + new TypeReference< + Map>>>() {}); + } log.info("[Auth] Loaded credentials for {} agent(s) from {}", loaded.size(), path); return loaded; } catch (Exception e) { diff --git a/workflow-engine/src/test/java/dev/openan/workflow/engine/client/AgentAuthManagerTest.java b/workflow-engine/src/test/java/dev/openan/workflow/engine/client/AgentAuthManagerTest.java index 8f7aba7b..44aae2d6 100644 --- a/workflow-engine/src/test/java/dev/openan/workflow/engine/client/AgentAuthManagerTest.java +++ b/workflow-engine/src/test/java/dev/openan/workflow/engine/client/AgentAuthManagerTest.java @@ -31,6 +31,19 @@ void loadsCredentialsFromClasspathLocation() throws Exception { config.get("bearerAuth").get("login_url")); } + @Test + void loadsCredentialsFromClasspathPrefix() { + AgentAuthManager manager = + new AgentAuthManager("classpath:test-agent-credentials.json"); + + var config = manager.getConfig("Test Agent"); + + assertNotNull(config); + assertEquals( + "https://auth.example.test/token", + config.get("bearerAuth").get("login_url")); + } + @Test void missingFileDoesNotCreateCredentials() { AgentAuthManager manager = @@ -38,4 +51,12 @@ void missingFileDoesNotCreateCredentials() { assertNull(manager.getConfig("Test Agent")); } + + @Test + void missingClasspathResourceDoesNotCreateCredentials() { + AgentAuthManager manager = + new AgentAuthManager("classpath:nonexistent-credentials.json"); + + assertNull(manager.getConfig("Test Agent")); + } }