springboot獲取訪問的ip地址的實現(xiàn)步驟
1、用shiro的方式獲取到的是127.0.0.1,或者用request.getRemoteAddr()也會是127.0.0.1(這個與瀏覽器地址有關(guān))
HttpServletRequest request; request.getRemoteAddr();
shiro
/**
* 獲取ip
*
* @return
*/
private String getIp() {
Subject subject = SecurityUtils.getSubject();
String host = subject.getSession().getHost();
return host;
}
發(fā)現(xiàn)全部是127.0.0.1
2、網(wǎng)上有個兄弟寫了一個方法,測試以后發(fā)現(xiàn)是可以獲取到ip的,在本機上測試成功,地址欄上面輸入Ip:port的形式訪問。
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
try {
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1")) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
// 對于通過多個代理的情況,第一個IP為客戶端真實IP,多個IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
// = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
} catch (Exception e) {
ipAddress = "";
}
return ipAddress;
}
不是在controller調(diào)用也是可以的,也就是沒有HttpServletRequest request參數(shù)情況下:
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
System.out.println("ip:"+IpUtil.getIpAddr(request));這樣就有ip地址了。
到此這篇關(guān)于springboot獲取訪問的ip地址的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)springboot獲取訪問ip地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中ArrayList和數(shù)組的轉(zhuǎn)換與遇到的問題解決
做研發(fā)的朋友都知道,在項目開發(fā)中經(jīng)常會碰到ArrayList與數(shù)組類型之間的相互轉(zhuǎn)換,這篇文章主要給大家介紹了關(guān)于JAVA中ArrayList和數(shù)組的轉(zhuǎn)換與遇到的問題解決,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05
SpringCloud OpenFeign遠程調(diào)用傳遞請求頭信息方式
這篇文章主要介紹了SpringCloud OpenFeign遠程調(diào)用傳遞請求頭信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2026-03-03
SpringBoot項目中讀取resource目錄下的文件六種方法
這篇文章給大家總結(jié)了SpringBoot項目中讀取resource目錄下的文件六種方法,文中有詳細的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下2024-05-05
Jmeter壓力測試簡單教程(包括服務器狀態(tài)監(jiān)控)
Jmeter是一個非常好用的壓力測試工具。Jmeter用來做輕量級的壓力測試,非常合適,本文詳細的介紹了Jmeter的使用,感性的可以了解一下2021-11-11
SpringBoot3 整合Docker-Compose的實現(xiàn)步驟
本文主要介紹了SpringBoot3 整合Docker-Compose的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-08-08

