Sicherheitskontext, das nicht ausbreitet wird, wenn Tools auf dem Spring AI MCP -Server aufgerufen werdenJava

Java-Forum
Anonymous
 Sicherheitskontext, das nicht ausbreitet wird, wenn Tools auf dem Spring AI MCP -Server aufgerufen werden

Post by Anonymous »

Integriere eine Spring-Boot-Anwendung in den Spring AI MCP Server (Spring-AI-Starter-MCP-Server-Webmvc). Ich teste es mit einer anderen Spring-Boot-Anwendung als Client und nutze die Abhängigkeit von Spring-AI-Starter-MCP-Client-Client.

Code: Select all

 McpSyncClient client = McpClientFactory.getInstance();
client.listTools();
< /code>
Bei Aufrufen eines Tools mit: < /p>
 client.callTool(new McpSchema.CallToolRequest(toolName, params));
< /code>
Ich stoße auf den Fehler: [b] Sicherheitskontext ist ungültig < /strong>.
Das [url=viewtopic.php?t=20324]Problem[/url] scheint zu sein, dass der MCP -Server die Tool -Ausführung an einen Boundedelastic -Thread delegiert, der nicht die Sicherheitskontext der ursprünglichen Anforderung verbreitet. Der Sicherheitskontext ist auf Werkzeugebene erforderlich, um Parameter wie organisationId zu bestimmen.DelegatingSecurityContextAsyncTaskExecutor
(nicht verbreitet)
[*]

Code: Select all

DelegatingSecurityContextTaskExecutor
(nicht verbreitet)
[*]

Code: Select all

SecurityContextHolder.MODE_INHERITABLETHREADLOCAL
(Propagates, aber ein Durcheinander für den Thread -Pool)
Swapping SDKs WebMVCSseServertransportProvider mit einem benutzerdefinierten Anbieter: Ich kann den Kontext manuell im neuen Thread manuell festlegen, aber das kopieren der SDK -Klasse hat das Verhalten immer noch geändert und es versagte, dass das Verhalten nicht mehr zu tun hat. /> unten ist im Grunde die Verwendung meines benutzerdefinierten Anbieters < /p>
durchzusetzen

Code: Select all

 @Bean
@Primary
public McpServerTransportProvider customWebMvcSseServerTransportProvider(){
return new CustomWebMvcSseServerTransportProvider(objectMapper, "/mcp/message");
}
< /code>
SDK-Anbietermethode, die zum Boundedelastic-Thread führt: < /p>
 public Mono sendMessage(McpSchema.JSONRPCMessage message) {
return Mono.fromRunnable(() -> {
try {
String jsonText = WebMvcSseServerTransportProvider.this.objectMapper.writeValueAsString(message);
this.sseBuilder.id(this.sessionId).event("message").data(jsonText);
WebMvcSseServerTransportProvider.logger.debug("Message sent to session {}", this.sessionId);
} catch (Exception var3) {
Exception e = var3;
WebMvcSseServerTransportProvider.logger.error("Failed to send message to session {}: {}", this.sessionId, e.getMessage());
this.sseBuilder.error(e);
}
});
}
Frage: [/b]
Wie kann ich sicherstellen, dass der Sicherheitskontext beim Aufrufen von Tools auf dem Spring AI MCP -Server ordnungsgemäß an den Boundedelastic -Thread aufgerichtet wird? Gibt es eine empfohlene Konfiguration oder eine Problemumgehung für dieses Problem?

Code: Select all

    


org.springframework.ai
spring-ai-bom
1.0.0-SNAPSHOT
pom
import





org.springframework.ai
spring-ai-starter-mcp-server-webmvc

Client:

Code: Select all

  


org.springframework.ai
spring-ai-bom
1.0.0-SNAPSHOT
pom
import





org.springframework.ai
spring-ai-starter-mcp-client

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post