亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot實現獲取客戶端IP地址的示例代碼

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

引言

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

在Controller組件中

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

直接通過HttpServletRequest獲取

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

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

這種方法是最簡單的,但是如果應用部署在代理服務器,就無法獲取真實的客戶端IP。

使用X-Forwarded-For

如果應用部署在代理服務器上,可以通過檢查X-Forwarded-For請求頭來獲取真實的客戶端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頭可以包含一個或多個IP地址,第一個通常是客戶端的真實IP。

在非Controller組件中

在非Controller組件中,可以通過RequestContextHolder獲取當前請求的HttpServletRequest對象。

使用RequestContextHolder

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

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

誤區(qū)

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

直接使用 @Autowired 注解通常不能自動注入 HttpServletRequest 對象,因為 HttpServletRequest 是與單個 HTTP 請求關聯的,它的作用域是請求級別的,而不是整個應用程序。

總結

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

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

相關文章

  • RocketMQ?producer發(fā)送者淺析

    RocketMQ?producer發(fā)送者淺析

    RocketMQ生產者是一種高性能、可靠的消息發(fā)送者,能夠將消息快速、可靠地發(fā)送到RocketMQ消息隊列中。它具有多種消息發(fā)送模式和消息發(fā)送方式,可以根據不同的業(yè)務需求進行靈活配置
    2023-04-04
  • Java基礎學習之運算符相關知識總結

    Java基礎學習之運算符相關知識總結

    今天帶大家復習Java基礎知識,文中對Java運算符相關知識作了詳細總結,對正在學習java基礎的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java線程池Executor用法詳解

    Java線程池Executor用法詳解

    本文主要為大家詳細介紹了Java線程池Executor的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Java?深入淺出解析面向對象之抽象類和接口

    Java?深入淺出解析面向對象之抽象類和接口

    本章具體介紹了抽象類和接口,整篇文章用目前流行的手機來舉例,圖解穿插代碼案例。?JAVA成仙路從基礎開始講,后續(xù)會講到JAVA高級,中間會穿插面試題和項目實戰(zhàn),希望能給大家?guī)韼椭?/div> 2022-03-03
  • Java運行Jar包內存配置的操作

    Java運行Jar包內存配置的操作

    這篇文章主要介紹了Java運行Jar包內存配置的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java利用cors實現跨域請求實例

    Java利用cors實現跨域請求實例

    本篇文章主要介紹了Java利用cors實現跨域請求實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring?boot詳解fastjson過濾字段為null值如何解決

    Spring?boot詳解fastjson過濾字段為null值如何解決

    這篇文章主要介紹了解決Spring?boot中fastjson過濾字段為null值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • spring.profiles.active配置使用小結

    spring.profiles.active配置使用小結

    spring.profiles.active?配置使得應用程序能夠在不同的環(huán)境中使用不同的配置,本文主要介紹了spring.profiles.active配置使用小結,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 詳解Java如何有效避免空指針

    詳解Java如何有效避免空指針

    空指針,也就是NullPointerException 簡稱NPE的,怕一下子寫出NPE,部分的伙伴看不懂,索性就改成了空指針,在實際的開發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務跑著跑著發(fā)現了空指針,所以本文詳細介紹了Java如何有效的避免空指針,需要的朋友可以參考下
    2023-12-12
  • Java實現LRU緩存的代碼詳解

    Java實現LRU緩存的代碼詳解

    LRU緩存是一種緩存替換策略,當緩存容量達到上限時,LRU 會淘汰掉最近最少使用的緩存項,在 Java 中,我們可以使用 LinkedHashMap 來實現一個簡單的 LRU 緩存,所以本文給大家介紹了Java實現LRU緩存的方法,需要的朋友可以參考下
    2025-03-03

最新評論