Zugriff auf Benutzernamen mit getRemoteUser() bei der Verwendung von benutzerdefinierten Authentifizierung-filter
Kurze version: Wie bekomme ich HttpServletRequest.getRemoteUser()
Rückkehr der Benutzername, wenn ich mit einer benutzerdefinierten Authentifizierung-filter?
Lange version:
Ich bin ändern der Tomcat-Anwendung, die derzeit verwendet deklarative Sicherheit (web.xml & tomcat-users.xml), um stattdessen die Verwendung einer benutzerdefinierten (von mir geschrieben) authentication filter (abgeleitet von javax.- servlet.- Filter). Es gibt eine Menge Informationen heraus dort auf, wie dies zu tun und es sieht sehr einfach.
Allerdings die bestehende Anwendung Aufrufe an HttpServletRequest.getRemoteUser()
, und ich gehe davon aus, dass, wenn ich etwas tun, um diese Eigenschaft festzulegen, in meinem filter, es wird null zurückgegeben. Ich kann nicht finden alle Informationen auf, wie zum Auffüllen der getRemoteUser()
Eigenschaft in einem filter (es gibt keine setRemoteUser()
). Ich fand eine post gibt, die empfiehlt, das einwickeln der request-Objekt in den filter. Ich werde dies tun, wenn ich muss, aber ich bin der Hoffnung, es ist eine weniger invasive Art und Weise, dies zu erreichen.
Kann jemand helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die einzige Möglichkeit zum ändern eines
HttpServletRequest
oderHttpServletResponse
ist, um es zu schmücken und bieten Ihre eigene Implementierung für die Methoden von Interesse, die durch überschreiben von Ihnen. Dies ist ein standard-Muster mit Authentifizierung Filter und das ist der Zweck desHttpServletRequestWrapper
(die Antwort Gegenstück istHttpServletResponseWrapper
). Wir tun es auf diese Weise wickeln Sie einen kerberisierten Anfrage wie folgtPrincipal
und überschreibengetUserPrincipal()
. Wir verwenden keinePrincipal
s in dieser Anwendung. Werde ich etwas zu brechen irgendwo, wenn wir nicht überschreibengetUserPincipal()
und nur überschreibengetRemoteUser()
?HttpServletRequest
verwenden getRemoteUser (), um die Benutzer-login).