2017-12-19 1 views
1

Ich benutze Tomcat 8 und brauche den Betreff außerhalb des LoginModules. Ich habe schon versucht:JAAS - Wie kann der Betreff außerhalb des LoginModules abgerufen werden?

Subject subject = Subject.getSubject(AccessController.getContext()); 

Aber das gibt nur jedes Mal null. Wer hat irgendwelche Ideen?

+0

Dies ist der Java SE Weg. In Java EE ist der einzige standardisierte Weg, um das JAAS "Subject" zu erhalten, über den JACC "PolicyContext", den Tomcat derzeit nicht unterstützt (und auch nicht benötigt). Empfohlene Lektüre: http://arjan-tijms.omnifaces.org/2014/02/jaas-in-java-ee-is-not-universal.html – Uux

Antwort

0

Ich benutze einen benutzerdefinierten Principal, die ein Subject enthalten kann, und hat den Login-Modul JAAS gesetzt, dass als Principal, dann request.getUserPrincipal() Ich benutze es in dem Web-App zurück zu bekommen, es zu meiner benutzerdefinierten Klasse geworfen und Anruf getSubject().

+0

Ich hatte gehofft, dass es einen Standard-JAAS-Weg gab, um das Subjekt abzurufen. Aber ich habe geschaut und geschaut und nichts gefunden. Ich denke, es ist der einzige Weg, eine Art von Hack zu erstellen. Scheint, dass JAAS in einigen Bereichen, wie dem Abrufen eines Subjekts und insbesondere dem Umgang mit javax.security.auth.login.LoginExceptions , das von der login() -Methode geworfen wird, stark fehlt. JAAS schluckt nur die Ausnahme und leitet Sie auf die in Ihrer web.xml angegebene Fehlerseite um. Sie haben keinen Zugriff auf die LoginException. Wie auch immer, danke für die Antwort. Ich werde es ausprobieren. Vielen Dank! –

+0

Ja. Es scheint, dass es für J2EE entworfen wurde und dann Teile davon auf die Servlet-Spezifikation zurückportiert wurden. Es scheint jedes Mal, wenn ich es ansehe, wieder von vorne zu funktionieren. Ich musste auch die Fehler- und Warnmeldungen als öffentliche Anmeldeinformationen des Betreffs hinzufügen, damit ich auf die Fehlerseite gelangen konnte. – EJP

Verwandte Themen