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
[*]
Code: Select all
DelegatingSecurityContextTaskExecutor
[*]
Code: Select all
SecurityContextHolder.MODE_INHERITABLETHREADLOCAL
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);
}
});
}
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
Code: Select all
org.springframework.ai
spring-ai-bom
1.0.0-SNAPSHOT
pom
import
org.springframework.ai
spring-ai-starter-mcp-client