Java無法獲取真實(shí)IP解決方案
問題
最近在寫博客瀏覽量的時候,設(shè)計(jì)了這么一個邏輯:同一個IP瀏覽一遍文章,5分鐘內(nèi)不刷新次數(shù)。就需要在服務(wù)器端得到用戶的真實(shí)IP,我代碼是這樣寫的(從網(wǎng)上找的方法):
public static String getRealIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); String unknown = "unknown"; if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
發(fā)現(xiàn)得到的IP總172開頭的IP,我查了下是本地局域網(wǎng)的IP,我的項(xiàng)目又是docker布署的,這又記我聯(lián)想到docker內(nèi)部的IP。。。
解決辦法
最后才發(fā)現(xiàn)nginx代理接口的時候,需要做獲取IP的配置
location ^~ /api { proxy_pass http://127.0.0.1:8110/; proxy_read_timeout 90; #得到請求真實(shí)IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect default; }
加上面面的配置,問題解決!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java.lang.UnsatisfiedLinkError: %1 不是有效的Win32應(yīng)用程序錯誤解決
這篇文章主要給大家介紹了關(guān)于java.lang.UnsatisfiedLinkError: %1 不是有效的Win32應(yīng)用程序錯誤的解決方法,文中介紹的非常詳細(xì),需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。2017-03-03Spring實(shí)戰(zhàn)之依賴關(guān)系注入之后的行為示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之依賴關(guān)系注入之后的行為,結(jié)合實(shí)例形式分析了Spring依賴關(guān)系注入之后的行為實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下2019-11-11SpringBoot集成Quartz實(shí)現(xiàn)定時任務(wù)的方法
Quartz是一個定時任務(wù)框架,其他介紹網(wǎng)上也很詳盡。這里要介紹一下Quartz里的幾個非常核心的接口。通過實(shí)例代碼給大家講解SpringBoot集成Quartz實(shí)現(xiàn)定時任務(wù)的方法,感興趣的朋友一起看看吧2020-05-05java多線程編程必備volatile與synchronized深入理解
這篇文章主要介紹了java多線程編程必備volatile與synchronized的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Spring框架應(yīng)用的權(quán)限控制系統(tǒng)詳解
在本篇文章里小編給大家整理的是關(guān)于基于Spring框架應(yīng)用的權(quán)限控制系統(tǒng)的研究和實(shí)現(xiàn),需要的朋友們可以學(xué)習(xí)下。2019-08-08Springboot如何使用mybatis實(shí)現(xiàn)攔截SQL分頁
這篇文章主要介紹了Springboot使用mybatis實(shí)現(xiàn)攔截SQL分頁,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Java參數(shù)傳遞實(shí)現(xiàn)代碼及過程圖解
這篇文章主要介紹了Java參數(shù)傳遞實(shí)現(xiàn)代碼及過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11在idea中創(chuàng)建SpringBoot模塊的兩種方式
這篇文章主要介紹了在idea中創(chuàng)建一個SpringBoot模塊,本文給大家分享兩種方式,每種方式分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05