Sto eseguendo un'applicazione di avvio a molla e sto iniziando a integrare Hystrix da spring-cloud-netflix. Sto usando @HystrixCommand per racchiudere una chiamata service-to-service fatta con un client fittizio.Spring rende disponibile SecurityContext per il thread che esegue un comando Hystrix
@HystrixCommand(fallbackMethod = "updateThingFallback")
def updateRemoteThing(thingResourceClient: ThingResourceClient, thing: Thing) {
thingResourceClient.updateThing(thing) // Call using feign client
}
Questo finto client utilizza il contesto di sicurezza molla per aggiungere intestazioni di sicurezza alla richiesta che effettua.
Il problema che si verifica è che quando viene eseguito HystrixCommand viene eseguito in un thread separato da un pool di thread Hystrix e quando il mio codice tenta di accedere al contesto di sicurezza Spring non è disponibile sul nuovo thread.
Sto accedendo al contesto di protezione primavera come questo:
SecurityContextHolder.getContext().getAuthentication();
La mia domanda è, non molla fornisce un modo di passare il contesto di sicurezza a molla (e il contesto dell'applicazione) per i fili Hystrix che eseguono i comandi Hystrix?
Grazie , questo funziona, MA se capisco correttamente 'SEMAPHORE' vs' THREAD', il punto in cui sto avendo problemi sarebbe stato ideale per THREAD: una chiamata di rete ad un servizio remoto, che nel migliore dei casi non è molto veloce e troppo spesso bombarda completamente. Quindi immagino che la mia migliore opzione sia di rielaborare il codice un po 'per passare l'auth come parametro? – demaniak