Umgebung: jdk1.8 + idea2019.3 + Windows10
Beim Umgang mit täglichen Betriebsprotokollen werden Benutzerbetriebsprotokolle grundsätzlich über AOP-Aspekte-Datensätze implementiert , aber wenn es um die Aufzeichnung von Betriebsprotokollen geht, muss es ein Element geben, das grundsätzlich als Referenz aufgezeichnet wird, und das ist die Client-IP-Adresse des Betreibers. Es ist auch praktisch, in Zukunft eine Überprüfung auf „Dirty“ durchzuführen.
Hier kommt also das Problem. Wie erhalten Sie konkret die IP-Adresse des Kunden? Hahaha, das ist mein Lehrinhalt in dieser Ausgabe. Wenn einige Freunde wissen, wie man es bekommt, dann möchte ich Sie loben, aber unterscheiden sich die Umsetzungsideen von meinen? So können Sie auch ausprobieren, wie Insektenbakterien umgesetzt werden.
Als nächstes fange ich an zu unterrichten, man muss gut zuhören.
Schritt 1: Lassen Sie uns zunächst eine Toolklasse definieren, die speziell zum Kapseln von IP-bezogenen Methodenklassen verwendet wird.
package com.example.review.util; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest; /** * ip相关工具类 * * @Author luoYong * @Date 2022-03-30 17:16 */ public class IpUtils { }
Der zweite Schritt: Dies ist der Kern dieses Tutorials. Wie erhält man also die Client-IP? Ich werde es nicht mehr verkaufen.
erhalten über request.getRemoteAddr() getRemoteAddr() kann die echte IP-Adresse des Clients nicht mehr abrufen.获 Warum können Sie es nicht erhalten, nachdem Sie einen Agenten hinzugefügt haben? Dies liegt daran, dass zwischen dem Client und dem Dienst ein Zwischen-Proxy hinzugefügt wird, sodass der Server die IP-Adresse des Clients nicht direkt abrufen kann und die serverseitige Anwendung die Adresse der Anforderung nicht direkt durch Weiterleitung an den Client zurückgeben kann Die Methode zum Erhalten ist direkt. Wurde übergeben.
Wenn Sie es immer noch nicht verstehen, schauen Sie sich das Diagramm des Agenturprozesses unten an und Sie werden es verstehen.不 Wenn Sie das System nur darauf beschränken, nicht als Agent zu fungieren, muss es in Ordnung sein. Es ist grundsätzlich unmöglich, dass das System nicht als Agent agiert. Was sollen wir also tun? Keine Sorge, ich werde dir sagen, wie man spielt, nachdem du meine Lehrmethoden angewendet hast, komm bitte und verprügel mich, okay?
Im Folgenden finden Sie die spezifische Methodenklasse zum Abrufen der Client-IP: nur zu Ihrer Information.
/*** * 获取客户端ip地址 * @param request */ public static String getIP(final HttpServletRequest request) throws Exception { if (request == null) { throw (new Exception("getIpAddr method HttpServletRequest Object is null")); } String ipStr = request.getHeader("x-forwarded-for"); if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) { ipStr = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) { ipStr = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) { ipStr = request.getRemoteAddr(); } // 多个路由时,取第一个非unknown的ip final String[] arr = ipStr.split(","); for (final String str : arr) { if (!"unknown".equalsIgnoreCase(str)) { ipStr = str; break; } } //目的是将localhost访问对应的ip 0:0:0:0:0:0:0:1 转成 127.0.0.1。 return ipStr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipStr; }
Es ist zu beachten, dass Sie bei der lokalen Entwicklung grundsätzlich den Standard-Hostnamen [localhost] für den Schnittstellenzugriff verwenden, oder? 0:0:0:0:0:0:0:1 sein.
Warum wird die IP so erhalten? Dies liegt daran, dass 0:0:0:0:0:0:0:1 die Darstellung von [ipv6] ist, was 127.0.0.1 für [ipv4], dem lokalen Computer, entspricht. Am Ende habe ich die IPv6-Adresse durch trinokulare Arithmetik zwangsweise in eine IPv4-Adresse umgewandelt. Kann das jeder verstehen? Wenn Sie es nicht verstehen, ist es nicht unmöglich, noch einmal am Computernetzwerk herumzubasteln.
Im Folgenden sind der Schnittstellenzugriff über localhost und die tatsächliche IP sowie die in der Datenbank gespeicherten Betriebsprotokolldatensätze aufgeführt.
Anbei ist ein Screenshot der lokalen IP-Datenbank:
Das obige ist der detaillierte Inhalt vonWie erhalte ich die IP-Adresse des Clients in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!