Spring Security: Authentifizierung, wird null zurückgegeben
Ich konfiguriert haben, ein Spring-bean wie folgt vor, um wieder eine SecurityContext:
<bean id="securityContext" class="org.springframework.security.context.SecurityContextHolder"
factory-method="getContext">
</bean>
Wenn ich diese bean das Authentication-Objekt liefert null zurück.
Authentication authentication = securityContext.getAuthentication();
GrantedAuthority[] authorities = authentication.getAuthorities();
In der zweiten Zeile oben genannten Ursachen eine NPE. Das scheint seltsam für mich, wie der folgende code gibt den Behörden als erwartet:
GrantedAuthority[] authorities =
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Grundsätzlich bin ich versucht, zu beseitigen die statische Aufruf SecurityContextHolder.getContext (), um meinen code besser getestet werden.
Irgendwelche Gedanken darüber, wie Abhilfe zu schaffen? Warum ist der SecurityContext zurückgegeben Frühling nicht zurückkehren können, den Behörden, während ein statischer Aufruf von meinem eigenen code?
Zur info ich bin ausführen von code innerhalb einer Struts 2 Aktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SecurityContextHolder.getContext() liefert den Kontext, der dem aktuellen thread zugeordnet. In bean Instanziierung des Kontext gespeichert in Ihrem bean ist anders als der Kontext, die Sie benötigen, wenn die Anwendung ausgeführt wird. Ich glaube nicht, dass es möglich ist, lagern Sie den Kontext, in einer bean und verwenden Sie diese die ganze Zeit.
Können Sie Ihr code getestet werden, indem die statische Ansatz. Sie müssen einfach erstellen Sie Ihre eigene Implementierung von org.springframework.Sicherheit.Authentifizierung
Also in Ihrem JUnit-Test...
Im obigen Beispiel 'userDetails' ist die Klasse implementiert die 'UserDetails', und in der Regel hüllt Ihren domain-Benutzer-Objekt.
Meine TestAuthentication Klasse - hoffe, das hilft
Ist es passiert, da die bean erstellt, der Sie nicht definieren Umfang - so ist es im Grunde ein singleton.
Um es wie Sie wollen, Sie brauchen, um es request/session scoped.
Verwenden Sie einen Lieferanten, dass Sie könnte, Spritzen Sie mit den default-vielleicht.