2017-11-29 2 views
0

Ich habe derzeit ein Webprojekt eingerichtet, wobei die formularbasierte JDBC-Realm-Authentifizierung auf dem Tomcat-Server eingerichtet wurde.Hinzufügen einer Anfrage, wenn sich der Benutzer anmeldet

Ich möchte die IP-Adresse des Benutzers, der sich in einer Datenbank anmeldet, mit der HttpServletRequest-Klasse speichern.

Wo (nach welcher Aktion) würde ich diese Anforderungsfunktion auf meinen JSP-Seiten hinzufügen?

Ich verwende JSP/Servlet, Tomcat und MySQL.

Danke!

Antwort

0

Sie können einen Servlet-Filter dafür verwenden. Der Servlet-Filter kann verwendet werden, um die eingehende HTTP-Servlet-Anfrage abzufangen und alles, was Sie möchten, mit der Anfrage zu tun oder einen Eintrag zu protokollieren.

Beachten Sie, dass Tomcat standardmäßig auch über ein Zugriffsprotokoll verfügt, das alle HTTP-Anforderungen, deren Status, IP und ggf. Benutzernamen enthält. Hier ist ein Beispiel.

192.168.0.47 - - [27/Nov/2017:07:18:07 -0600] "GET /example/module?wsdl HTTP/1.1" 200 3122 
192.168.0.47 - - [27/Nov/2017:07:18:07 -0600] "POST /otherapp/service HTTP/1.1" 200 251 
fe80:0:0:0:fc36:e3bb:5bc4:abce%14 - asm-admin [27/Nov/2017:07:18:08 -0600] "POST /otherapp/HEARTBEAT/?v-uiId=0 HTTP/1.1" 200 - 
fe80:0:0:0:fc36:e3bb:5bc4:abce%14 - asm-admin [27/Nov/2017:07:18:18 -0600] "POST /otherapp/HEARTBEAT/?v-uiId=0 HTTP/1.1" 200 - 
fe80:0:0:0:fc36:e3bb:5bc4:abce%14 - asm-admin [27/Nov/2017:07:18:28 -0600] "POST /otherapp/HEARTBEAT/?v-uiId=0 HTTP/1.1" 200 - 
+0

Wo würde ich dieses Protokoll finden? Auch wie würde ich in der Lage sein zu sagen, welche Anfrage ist die Login-Anfrage, und wie würde ich das verwenden, um in meine Datenbank zu posten? – NotAMonkey24

+0

Sie würden wissen, dass es sich um eine Login-Anfrage handelt, weil es auf die Login-Seite ging. Sie würden wissen, dass es sich um eine fehlgeschlagene Anmeldeanforderung handelt, da der Code HTTP 401 wäre. Sie wissen, dass authN erfolgreich war, der Benutzer jedoch nicht über die richtigen Berechtigungen verfügt, da der Code 403 lautet. Diese Protokolldatei befindet sich in TOMCAT_HOME/logs. Schauen Sie hier für weitere Informationen: http://www.techstacks.com/howto/configure-access-logging-in-tomcat.html –

+0

Das funktioniert, danke! Momentan bekomme ich nur 0.0.0.0.0.1 von getRemoteAddr, aber das ist richtig für localhost, oder? – NotAMonkey24

0

Nach erfolgreicher Anmeldung können Sie den Benutzernamen und die IP-Adresse aus der Anfrage abrufen und weiter bearbeiten. Ich denke, die Herausforderung besteht darin, sie direkt nach dem Login zu erfassen, da der formatbasierte Login von Tomcats ziemlich transparent ist. Ich löste es, indem ich den Benutzernamen im Sitzungsobjekt speicherte und die Daten nur speicherte, wenn die Werte nicht bereits in der Sitzung sind. Wahrscheinlich müssen Sie berücksichtigen, dass eine Sitzung möglicherweise abläuft.

+0

Was wäre der "Auslöser" zum Speichern dieser Sitzungsdaten? – NotAMonkey24

+0

Dies könnte sein, wenn das Sitzungsobjekt 'user' null zurückgibt, wenn es nicht gesetzt ist und der Wert. So etwas wie: if (session.getAttribute ("user.name") == null) { saveEntry(); session.setAttribute ("user.name", request.getRemoteUser()); } –

Verwandte Themen