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

springboot實(shí)現(xiàn)獲取客戶端IP地址的示例代碼

 更新時(shí)間:2024年11月18日 09:38:28   作者:這個(gè)名字應(yīng)該沒人用吧  
本文介紹了在SpringBoot中獲取客戶端IP地址的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

在Web開發(fā)中,獲取客戶端的IP地址是一項(xiàng)常見需求,無論是用于日志記錄、安全策略實(shí)施還是個(gè)性化服務(wù)。在Spring Boot應(yīng)用程序中,有多種方法可以實(shí)現(xiàn)這一功能。本文將介紹在Spring Boot中如何獲取請(qǐng)求頭和客戶端IP地址的不同方法。

在Controller組件中

在Spring Boot的Controller組件中,可以通過自動(dòng)注入HttpServletRequest對(duì)象來獲取客戶端的IP地址。

直接通過HttpServletRequest獲取

最直接的方法是使用HttpServletRequest對(duì)象的getRemoteAddr()方法來獲取IP地址。

@GetMapping
public String getIpAddress(HttpServletRequest request) {
    String ip = request.getRemoteAddr();
    return ip;
}

這種方法是最簡單的,但是如果應(yīng)用部署在代理服務(wù)器,就無法獲取真實(shí)的客戶端IP。

使用X-Forwarded-For

如果應(yīng)用部署在代理服務(wù)器上,可以通過檢查X-Forwarded-For請(qǐng)求頭來獲取真實(shí)的客戶端IP地址。

@GetMapping
public String getIpAddress(HttpServletRequest request) {
    String ipAddress = request.getHeader("X-Forwarded-For");
    if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getHeader("Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getRemoteAddr();
    }
    return ipAddress.split(",")[0];
}

X-Forwarded-For頭可以包含一個(gè)或多個(gè)IP地址,第一個(gè)通常是客戶端的真實(shí)IP。

在非Controller組件中

在非Controller組件中,可以通過RequestContextHolder獲取當(dāng)前請(qǐng)求的HttpServletRequest對(duì)象。

使用RequestContextHolder

public String getIpAddress() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        // 上面兩個(gè)獲取Ip的邏輯都可以
    }

這種方法可以在任何Spring管理的Bean中使用,提供了一種靈活的方式來獲取客戶端IP地址。

誤區(qū)

Spring Boot中的bean,那不是可以使用@Autowired 注解自動(dòng)注入嗎?

直接使用 @Autowired 注解通常不能自動(dòng)注入 HttpServletRequest 對(duì)象,因?yàn)?nbsp;HttpServletRequest 是與單個(gè) HTTP 請(qǐng)求關(guān)聯(lián)的,它的作用域是請(qǐng)求級(jí)別的,而不是整個(gè)應(yīng)用程序。

總結(jié)

本文介紹了在Spring Boot中獲取客戶端IP地址的幾種方法,包括在Controller中直接獲取、使用X-Forwarded-For頭、以及在非Controller組件中通過RequestContextHolder獲取。在實(shí)際應(yīng)用中,可能需要根據(jù)具體情況選擇最合適的方法。

到此這篇關(guān)于springboot實(shí)現(xiàn)獲取客戶端IP地址的示例代碼的文章就介紹到這了,更多相關(guān)springboot 獲取客戶端IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud feign服務(wù)熔斷下的異常處理操作

    SpringCloud feign服務(wù)熔斷下的異常處理操作

    這篇文章主要介紹了SpringCloud feign服務(wù)熔斷下的異常處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring解決泛型擦除的思路詳解

    Spring解決泛型擦除的思路詳解

    這篇文章主要介紹了Spring解決泛型擦除的思路,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • java重寫(@Override)介紹以及舉例說明

    java重寫(@Override)介紹以及舉例說明

    這篇文章主要給大家介紹了關(guān)于java重寫(@Override)介紹以及舉例說明的相關(guān)資料,在Java中@Override注解用于表示方法重寫(覆蓋)了父類的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java程序員必須知道的5個(gè)JVM命令行標(biāo)志

    Java程序員必須知道的5個(gè)JVM命令行標(biāo)志

    這篇文章主要介紹了每個(gè)Java程序員必須知道的5個(gè)JVM命令行標(biāo)志,需要的朋友可以參考下
    2015-03-03
  • SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法

    這篇文章主要介紹了SpringBoot打War包上傳到阿里云的LINUX服務(wù)器,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java 如何同時(shí)返回多個(gè)不同類型

    Java 如何同時(shí)返回多個(gè)不同類型

    這篇文章主要介紹了Java 同時(shí)返回多個(gè)不同類型的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java?json轉(zhuǎn)換實(shí)體類(JavaBean)及實(shí)體類(JavaBean)轉(zhuǎn)換json代碼示例

    Java?json轉(zhuǎn)換實(shí)體類(JavaBean)及實(shí)體類(JavaBean)轉(zhuǎn)換json代碼示例

    這篇文章主要介紹了兩種常見的JSON與Java實(shí)體類相互轉(zhuǎn)換的方法,分別是使用庫Jackson、Gson、Fastjson和在線工具,無論是將JSON轉(zhuǎn)換為Java實(shí)體類還是將Java實(shí)體類轉(zhuǎn)換為JSON,這些方法都能顯著簡化開發(fā)過程,需要的朋友可以參考下
    2024-12-12
  • Application.yml的自定義屬性的讀取方式

    Application.yml的自定義屬性的讀取方式

    這篇文章主要介紹了Application.yml的自定義屬性的讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot詳細(xì)講解yaml配置文件的用法

    SpringBoot詳細(xì)講解yaml配置文件的用法

    這篇文章主要介紹了SpringBoot中的yaml配置文件問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java多例設(shè)計(jì)模式實(shí)例詳解

    Java多例設(shè)計(jì)模式實(shí)例詳解

    這篇文章主要介紹了Java多例設(shè)計(jì)模式,結(jié)合實(shí)例形式分析了基于Java的多例模式概念、原理、定義與使用方法,需要的朋友可以參考下
    2018-05-05

最新評(píng)論