国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot】SpringBoot獲取不到用戶真實IP怎么辦

這篇具有很好參考價值的文章主要介紹了【SpringBoot】SpringBoot獲取不到用戶真實IP怎么辦。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

項目部署后發(fā)現(xiàn)服務(wù)端無法獲取到客戶端真實的IP地址,這是怎么回事呢?給我都整懵逼了,經(jīng)過短暫的思考,我發(fā)現(xiàn)了問題的真兇,那就是我們使用了Nginx作的請求轉(zhuǎn)發(fā),這才導致了獲取不到客戶端真實的IP地址,害,看看我是怎么解決的吧!

問題原因

客戶端請求數(shù)據(jù)時走的是Nginx反向代理,默認情況下客戶端的真實IP地址會被其過濾,使得SpringBoot程序無法直接獲得真實的客戶端IP地址,獲取到的都是Nginx的IP地址。

解決方案

通過更改Nginx配置文件將客戶端真實的IP地址加到請求頭中,這樣就能正常獲取到客戶端的IP地址了,下面我一步步帶你看看如何配置和獲取。

修改Nginx配置文件

在需要做請求轉(zhuǎn)發(fā)的配置里添加下面的配置

#這個參數(shù)設(shè)置了HTTP請求頭的Host字段,host表示請求的Host頭,也就是請求的域名。通過這個設(shè)置,Nginx會將請求的Host頭信息傳遞給后端服務(wù)。
proxy_set_header Host $host;
#這個參數(shù)設(shè)置了HTTP請求頭的X?Real?IP字段,remote_addr表示客戶端的IP地址。通過這個設(shè)置,Nginx會將客戶端的真實IP地址傳遞給后端服務(wù)
proxy_set_header X-Real-IP $remote_addr;
#這個參數(shù)設(shè)置了HTTP請求頭的 X-Forwarded-For字段,"X-Forwarded-For"是一個標準的HTTP請求頭,用于表示HTTP請求經(jīng)過的代理服務(wù)器鏈路信息,proxy_add_x_forwarded_for表示添加額外的服務(wù)器鏈路信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

修改后我的nginx.conf中的server如下所示
nginx復(fù)制代碼

server {
  listen 443 ssl;
  server_name xxx.com;

  ssl_certificate "ssl證書pem文件";
  ssl_certificate_key "ssl證書key文件";
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

  location / {
    root   前端html文件目錄;
    index  index.html index.htm;
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root html;
  }
  # 關(guān)鍵在下面這個配置,上面的配置自己根據(jù)情況而定就行
  location /hello{
    proxy_pass http://127.0.0.1:8090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

SpringBoot代碼實現(xiàn)

第一種方式:在代碼中直接通過X-Forwarded-For獲取到真實IP地址

@Slf4j
public class CommonUtil {
    /**
     * <p> 獲取當前請求客戶端的IP地址 </p>
     *
     * @param request 請求信息
     * @return ip地址
     **/
    public static String getIp(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        String unknown = "unknown";
        // 使用X-Forwarded-For就能獲取到客戶端真實IP地址
        String ip = request.getHeader("X-Forwarded-For");
        log.info("X-Forwarded-For:" + ip);
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
            log.info("Proxy-Client-IP:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
            log.info("WL-Proxy-Client-IP:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            log.info("HTTP_X_FORWARDED_FOR:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED");
            log.info("HTTP_X_FORWARDED:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
            log.info("HTTP_X_CLUSTER_CLIENT_IP:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
            log.info("HTTP_CLIENT_IP:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED_FOR");
            log.info("HTTP_FORWARDED_FOR:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED");
            log.info("HTTP_FORWARDED:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_VIA");
            log.info("HTTP_VIA:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getHeader("REMOTE_ADDR");
            log.info("REMOTE_ADDR:" + ip);
        }
        if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
            log.info("getRemoteAddr:" + ip);
        }
        return ip;
    }

第二種方式:在application.yml文件中加以下配置,直接通過request.getRemoteAddr()并可以獲取到真實IP文章來源地址http://www.zghlxwxcb.cn/news/detail-656392.html

server:
  port: 8090
  tomcat:
    #Nginx轉(zhuǎn)發(fā) 獲取客戶端真實IP配置
    remoteip:
      remote-ip-header: X-Real-IP
      protocol-header: X-Forwarded-Proto

到了這里,關(guān)于【SpringBoot】SpringBoot獲取不到用戶真實IP怎么辦的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 電腦檢測不到無線網(wǎng)絡(luò)信號怎么辦?

    昨天上網(wǎng)還正常呢,今天打開電腦就搜索不到無線信號了,路由和貓都正常,電腦的無線網(wǎng)卡也是開著的,一直沒動過,哪位高手幫幫忙。謝謝 你的問題可能有2種,一個是無線網(wǎng)卡接觸不良,可以重新插拔一下無線網(wǎng)卡嘗試.另外的一個就是路由器的信道問題,我之前公司的網(wǎng)絡(luò)

    2024年02月05日
    瀏覽(31)
  • 電腦屏幕亮度怎么調(diào)節(jié)?臺式電腦找不到屏幕亮度怎么辦

    電腦屏幕亮度怎么調(diào)節(jié)?臺式電腦找不到屏幕亮度怎么辦

    我們在使用電腦的時候,經(jīng)常會覺得電腦屏幕的亮度太亮了或者是太暗了。這個時候通常就要去調(diào)節(jié)電腦屏幕亮度。電腦屏幕亮度怎么調(diào)節(jié)?臺式電腦找不到屏幕亮度怎么辦?下面小編給大家?guī)砹苏{(diào)節(jié)電腦屏幕亮度的詳細教程。 ? 電腦太亮了或者太暗了,想要調(diào)節(jié)電腦屏幕

    2024年02月10日
    瀏覽(34)
  • 計算機中丟失msvcr120.dll怎么辦,電腦找不到msvcr120.dll怎么辦

    計算機中丟失msvcr120.dll怎么辦,電腦找不到msvcr120.dll怎么辦

    電腦提示msvcr120.dll丟失是一個常見的問題,這個問題通常會在你嘗試打開某些程序或游戲時出現(xiàn)。這個問題的原因是因為你的電腦缺少了一個名為msvcr120.dll的文件,這個文件是微軟Visual C++ Redistrle for Visualv 2013的一部分。如果你遇到了這個問題,不要擔心,下面是三種解決方法

    2024年02月13日
    瀏覽(46)
  • Win11找不到顯卡控制面板怎么辦?

    Win11找不到顯卡控制面板怎么辦?

    很多朋友玩游戲需要通過顯卡控制面板來進行一些設(shè)置,使畫質(zhì)更好一些,提高幀數(shù),增強游戲體驗,不過有一些用戶找不到win11顯卡控制面板在哪里,今天來詳細給朋友們進行介紹。 更多重裝系統(tǒng)教程盡在 小白系統(tǒng)重裝官網(wǎng) 1、若是Win10,在桌面點擊右鍵就可以看到相關(guān)選

    2024年02月07日
    瀏覽(82)
  • 由于找不到concrt140.dll怎么辦?

    由于找不到concrt140.dll怎么辦?

    最近有用戶反應(yīng)之前打開軟件是可以用的 但是今天打開就跳出這個對話框了 :由于找不到CONCRT140.dll,無法繼續(xù)執(zhí)行代碼。重新安裝程序可能會解決此問題。下面小編就為大家?guī)斫鉀Q方法介紹! 提示“由于找不到concrt140.dll,無法繼續(xù)執(zhí)行代碼”怎么解決? 1、下載一個 D

    2024年02月12日
    瀏覽(89)
  • app滲透測試抓不到數(shù)據(jù)包怎么辦?

    app滲透測試抓不到數(shù)據(jù)包怎么辦?

    1、app滲透測試常見的模擬器有夜神,閃電模擬器等。 2、遇到問題,數(shù)據(jù)包抓不到? (1)最常見的解決方法調(diào)低模擬器安卓版本,使用MuMu模擬器,大部分app都適用,但是也有些app無法抓取。 (2)安裝證書到系統(tǒng)根證書,可以解決上面的問題(一般情況下手機在安裝了BurpSuite的偽證

    2024年02月13日
    瀏覽(22)
  • 電腦提示“系統(tǒng)找不到指定的文件”怎么辦?

    電腦提示“系統(tǒng)找不到指定的文件”怎么辦?

    “系統(tǒng)找不到指定的文件” 對于Windows用戶來說是一個很常見的錯誤,尤其是Win10用戶,經(jīng)常會遇到Win10提示找不到指定文件。在此錯誤后面有時還會出現(xiàn)錯誤代碼:0x80070002,但是,故障類型或代碼在不同的操作系統(tǒng)規(guī)范上是不同的。 當您安裝磁盤驅(qū)動程序、制作系統(tǒng)映像、

    2024年02月09日
    瀏覽(22)
  • git切換分支提示找不到分支怎么辦

    隨著代碼學習的深入,越來越多人使用github或者gitlab進行項目管理,這就會涉及到一些遠程操作。比如的ssh配置在linux+gitlab 還有本文的主角:倉庫分支的切換不成功。 分支可以基于現(xiàn)有分支進行創(chuàng)建,方便在現(xiàn)有代碼上實現(xiàn)或者測試一些新的功能,而不會污染原始的分支上

    2024年02月07日
    瀏覽(19)
  • pycharm找不到conda可執(zhí)行文件怎么辦?

    pycharm找不到conda可執(zhí)行文件怎么辦?

    問題:pycharm配置conda環(huán)境找不到conda可執(zhí)行文件 解決辦法: 1. 找到??anaconda 安裝目錄(D:Userswlanaconda3) 2. 打開pycharm (看圖吧手動狗頭) ? ? ? ? ?找到anaconda3condabinconda.bat ? 選擇你要使用的虛擬環(huán)境 然后確定?

    2024年02月11日
    瀏覽(22)
  • Selenium定位不到元素怎么辦?一定要這么做

    Selenium定位不到元素怎么辦?一定要這么做

    在使用Selenium進行自動化測試時,碰到無法定位元素該怎么辦?這里總結(jié)了9種情況下的元素定位方法: 1、frame/iframe表單嵌套 WebDriver只能在一個頁面上對元素識別與定位,對于frame/iframe表單內(nèi)嵌的頁面元素無法直接定位。 解決方法: switch_to.frame() 默認可以直接取表單的id或

    2024年03月15日
    瀏覽(73)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包