欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot如何獲取客戶端的IP地址

 更新時(shí)間:2024年05月06日 14:51:45   作者:沙漠真有魚  
這篇文章主要介紹了SpringBoot如何獲取客戶端的IP地址問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

在Web應(yīng)用程序中,獲取客戶端的IP地址是一項(xiàng)非常常見(jiàn)的需求,例如記錄訪問(wèn)日志、過(guò)濾惡意IP等。

在本文中,我們將介紹如何使用Spring Boot框架獲取客戶端的IP地址。

方法一

使用ServletRequest對(duì)象獲取IP地址

Spring Boot應(yīng)用程序可以使用HttpServletRequest對(duì)象獲取客戶端的IP地址。

在Spring Boot中,可以通過(guò)注入HttpServletRequest作為一個(gè)參數(shù)來(lái)獲取該對(duì)象。

@GetMapping("/getIp")
public String getIp(HttpServletRequest request) {
    String ipAddress = request.getRemoteAddr();
    return "Client IP address: " + ipAddress;
}

上述代碼中,我們通過(guò)調(diào)用 request.getRemoteAddr() 方法獲取客戶端的IP地址。

方法二

使用ServletRequestAttributes對(duì)象獲取IP地址

除了使用HttpServletRequest對(duì)象外,Spring Boot還提供了另一種獲取客戶端IP地址的方法。

這種方法是使用ServletRequestAttributes對(duì)象,在方法中注入該對(duì)象即可。

代碼如下:

@GetMapping("/getIp2")
public String getIp2(ServletRequest request) {
    String ipAddress = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getRemoteAddr();
    return "Client IP address: " + ipAddress;
}

在上面的代碼中,我們通過(guò) RequestContextHolder.currentRequestAttributes()方法獲取當(dāng)前的HttpServletRequest對(duì)象

再通過(guò) getRequest().getRemoteAddr() 方法獲取客戶端的IP地址。

注意事項(xiàng)

雖然以上兩種方法可以獲取客戶端的IP地址,但需要注意以下幾個(gè)問(wèn)題:

  • 如果應(yīng)用程序部署在反向代理服務(wù)器后面,使用上述方法獲取的IP地址可能是反向代理服務(wù)器的IP地址,而不是客戶端真正的IP地址。
  • 有些客戶端可能使用了匿名代理服務(wù)器,例如TOR等,此時(shí)獲取到的IP地址不是客戶端真正的IP地址。

解決方案

使用X-Forwarded-For頭

為了解決上述問(wèn)題,我們可以使用X-Forwarded-For頭。

該頭字段是一個(gè)逗號(hào)分隔的IP地址列表,最左邊的IP地址是客戶端的真實(shí)IP地址。

以下是使用X-Forwarded-For頭獲取客戶端IP地址的示例代碼。

@GetMapping("/getIp3")
public String getIp3(HttpServletRequest request) {
    String 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();
    }
    return "Client IP address: " + ipAddress.split(",")[0];
}

上述代碼中,我們首先使用 request.getHeader("X-Forwarded-For") 方法獲取X-Forwarded-For頭字段的值,如果獲取失敗,則嘗試使用其他頭字段。

最后,我們通過(guò)逗號(hào)對(duì)IP地址進(jìn)行分割,獲取最左邊的IP地址,即客戶端的真實(shí)IP地址。

總結(jié)

本文介紹了使用Spring Boot框架獲取客戶端IP地址的三種方法:

  • 1.使用HttpServletRequest對(duì)象
  • 2.使用ServletRequestAttributes對(duì)象
  • 3.使用X-Forwarded-For頭

當(dāng)我們需要獲取客戶端的真實(shí)IP地址時(shí),應(yīng)該使用X-Forwarded-For頭解決代理服務(wù)器和匿名代理服務(wù)器的問(wèn)題。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • maven搭建java ee項(xiàng)目圖文教程

    maven搭建java ee項(xiàng)目圖文教程

    這篇文章主要為大家詳細(xì)介紹了maven搭建java ee項(xiàng)目圖文教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • springboot+redis實(shí)現(xiàn)微博熱搜排行榜的示例代碼

    springboot+redis實(shí)現(xiàn)微博熱搜排行榜的示例代碼

    本文主要介紹了springboot+redis實(shí)現(xiàn)微博熱搜排行榜的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java解決No enclosing instance of type PrintListFromTailToHead is accessible問(wèn)題的兩種方案

    Java解決No enclosing instance of type PrintListFromTailToHead

    這篇文章主要介紹了Java解決No enclosing instance of type PrintListFromTailToHead is accessible問(wèn)題的兩種方案的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • springboot2.0配置連接池(hikari、druid)的方法

    springboot2.0配置連接池(hikari、druid)的方法

    springboot 2.0 默認(rèn)連接池就是Hikari了,直接在配置文件中輸入配置就可以了,本文通過(guò)實(shí)例代碼給大家介紹了springboot2.0配置連接池(hikari、druid)的方法,感興趣的朋友一起看看吧
    2021-12-12
  • drools中then部分的寫法(推薦)

    drools中then部分的寫法(推薦)

    本文介紹一下drools中then部分的寫法,以及一些內(nèi)置的方法,比如insert/delete/modify等等。同時(shí)也介紹一下rule的繼承,和在when中實(shí)現(xiàn)if else if?等操作,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • 基于@JsonProperty的使用說(shuō)明

    基于@JsonProperty的使用說(shuō)明

    這篇文章主要介紹了基于@JsonProperty的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java DFA算法案例詳解

    Java DFA算法案例詳解

    這篇文章主要介紹了Java DFA算法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Web三大組件之Filter,Listener和Servlet詳解

    Web三大組件之Filter,Listener和Servlet詳解

    這篇文章主要為大家詳細(xì)介紹了Web三大組件之Filter,Listener和Servlet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • JAVA如何獲取客戶端IP地址和MAC地址

    JAVA如何獲取客戶端IP地址和MAC地址

    本篇文章主要介紹了JAVA如何獲取客戶端IP地址和MAC地址非常具有實(shí)用價(jià)值,這里整理了詳細(xì)的代碼,需要的朋友可以參考下
    2017-08-08
  • Spring?Boot?集成并開發(fā)?Sa-token示例詳解

    Spring?Boot?集成并開發(fā)?Sa-token示例詳解

    Sa-token是一款高可用的權(quán)限認(rèn)證框架,他帶我們用最簡(jiǎn)化的配置完成用?spring?security?需要進(jìn)行大量配置的才能完成的工作,這篇文章主要介紹了Spring?Boot?集成并開發(fā)?Sa-token,需要的朋友可以參考下
    2023-06-06

最新評(píng)論