Ich habe eine Webanwendung, die einen Federsicherheitskontext durch einen Federfilter einstellt. Die Dienste sind mit Spring-Anmerkungen basierend auf Benutzerrollen geschützt. Das funktioniert.Wie verbreitet man den Sicherheitskontext für Spring auf JMS?
Asynchrone Tasks werden in JMS-Listenern ausgeführt (extend javax.jms.MessageListener). Die Einrichtung dieser Listener erfolgt mit Spring.
Nachrichten werden von der Webanwendung gesendet, zu diesem Zeitpunkt wird ein Benutzer authentifiziert. Ich benötige die gleiche Authentifizierung im JMS-Thread (Benutzer und Rollen) während der Nachrichtenverarbeitung.
Heute ist dies, indem sie die Feder-Authentifizierung in der JMS Object getan:
SecurityContext context = SecurityContextHolder.getContext();
Authentication auth = context.getAuthentication();
... put the auth object in jms message object
innerhalb der JMS-Listener dann das Authentifikationsobjekt wird im Rahmen extrahiert und eingestellt:
SecurityContext context = new SecurityContextImpl();
context.setAuthentication(auth);
SecurityContextHolder.setContext(context);
Dies funktioniert meistens. Wenn es jedoch eine Verzögerung vor der Verarbeitung einer Nachricht gibt, wird die Nachricht niemals verarbeitet. Ich konnte die Ursache dieses Nachrichtenverlustes noch nicht bestimmen, aber ich bin mir nicht sicher, wie wir die Authentifizierung verbreiten, auch wenn sie in custer funktioniert, wenn die Nachricht auf einem anderen Server verarbeitet wird.
Ist dies der richtige Weg, um eine Feder-Authentifizierung zu propagieren?
Grüße, Mickaël
Ich bin nicht vertraut mit Spring in diesem Zusammenhang, aber ich bin auf dieses Problem schon einmal gestoßen. Ein guter Sicherheitskontext hat eine Ablaufzeit, nach der er nicht mehr verwendet werden kann. Wenn eine Nachrichtenzustellung nach dem Ablauf verzögert wird, ist der Sicherheitskontext im Allgemeinen abgelaufen und die Nachricht wurde nicht verarbeitet. Dies könnte das Problem sein, in welchem Fall die Erhöhung der Ablaufzeit dies beheben oder zumindest weniger häufig machen kann. – Alasdair