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

