So finden Nutzer-IPs in Spring Security?
Muss ich feststellen, dass diese Benutzer, die angemeldet sind, in unserer Anwendung.
Wir sind mit Spring Security und es muss ein Weg, um herauszufinden, Nutzer-IPs.
Ich denke, dass diese Informationen gespeichert sind, die in Ihren Sitzungen. In Spring Security, die aktuelle Sitzungen gespeichert werden SessionRegistry. Von dieser Klasse kann ich Liste von authentifizierten Benutzer und einige session-Informationen. (Mit getAllPrincipals
, getAllSessions
und getSessionInformation
)
Die Frage ist, wie kann ich Zugang zu aktuellen Nutzer-IPs? Betrachten wir zu geben haben service zu einer bekannten region nur.
Die SessionInformation ist nicht viel Hilfe, da es nicht enthalten viele Informationen.
- Sie können feststellen, dass
Authentication.getDetails()
gibt eineWebAuthenticationDetails
- Objekt, das enthält die remote-Adresse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass die Prüfung erreicht werden, indem hasIpAddress http expression
Siehe Abschnitt 15.2 Web-Security-Ausdrücke
Wenn du mehr Flexibilität haben möchten, implementieren Sie Ihre eigene IP-Adresse kontrollieren-service, basierend auf IpAddressMatcher:
bean-Implementierung:
update: Sie können versuchen zu Holen Sie sich die aktuellen Nutzer-IP-Adresse auf diese Weise:
update die Informationen über Die Beziehung zwischen IP-Adressen und Sitzungen können nur gesammelt werden, aus den verschiedenen Quellen(wie das hören von AuthenticationSuccessEvent und SessionDestroyedEvent Ereignisse, die Implementierung eines filters oder die Verwendung eines AOP interceptor). Spring Security speichert keine solchen Informationen, denn es ist nutzlos, da die IP-Adresse hat einen Sinn nur, wenn der server-Verarbeitung ist eine ServletRequest.
IP-Adresse kann sich ändern(user kann über einen proxy), so können wir nur audit verschiedene Arten von Veranstaltungen wie Anmeldung mit einigen Anmeldeinformationen, die Zugriff auf einen service von einer anderen IP, oder dabei einige verdächtige Aktivitäten.
Können Sie die IP-Adresse vom WebAuthenticationDetails Objekt, welches man aus Authentifizierung Instanz.
Können Sie HttpServletRequest für die erste IP-Adresse des Benutzers. (Entwickler von SpringSecurity tun dies in der gleichen Weise, in Ihrem Ausdruck hasIpAddress(...) in WebSecurityExpressionRoot Klasse).
Zum Beispiel können Sie bekommen HttpServletRequest 2 Möglichkeiten:
1) Mit RequestContextHolder:
2) Mit autowiring:
Ich habe das von hier.
Dann mit HttpServletRequest können Sie die Ip-Adresse in einer solchen Art und Weise:
Und hier ist, wie die Adressen verglichen werden, in spring security:
Und IpAddressMatcher Klasse:
EDIT:
Laut Fragen hier und hier können Sie Benutzer hinzufügen, die IP zu der Sitzung mit benutzerdefinierten filtern. Und dann diese Informationen aus der Sitzung mit Bezug auf den Benutzer, wo es notwendig sein wird. Zum Beispiel Sie können Ihre IP-Informationen wie diese:
SecurityContextHolder
enthält aktuelle Benutzer. Also ich bin abzuleiten, dass ich kann jede IP mit Ihrer Methode. Jedoch, ich bin auf der Suche nach einer Möglichkeit, alle Benutzer' IPs. Gibt es eine Möglichkeit?