日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

JAVA web中的Controller如何獲取客戶端的IP地址?我們通常的做法都是通過
HttpServletRequest.getRemoteHost方法,但是這個簡單的方法卻可能你無法獲取到真實的客戶端IP。我們都知道HTTP的服務一般都是會躲在一個代理服務器后面的(比如Nginx、Apache以及其他的網關服務等,當然如果應用比較簡單,我們也會將web服務直接暴露出去),因此我們通過HttpServletRequest.getRemoteHost獲取到的IP地址可能是我們的網關的IP地址。

IP被代理

我們如果想獲取客戶端真正的IP,就需要http網關的支持。通常情況下我們的HTTP網關會使用apache和ngnix這種軟負載,當然也有一些工作在HTTP層的硬件網關。針對硬件網關我們自然是需要和PE交代好,需要硬件層面把客戶端真實的IP通過HTTP頭傳遞給我們,一般我們會使用X-Forwarded-For作為默認的真實IP的http header。

而如果這個http網關是由我們自己運維的,那就更簡單了。以nginx為例,我們可以通過以下配置將客戶端真實IP放到http header中,傳給Web服務器:

proxy_set_header X-Forwarded-For $remote_addr;

這樣我們的代碼就能獲取到真實的客戶端IP地址:

@GetMApping("/get")
public String getClientIP(HttpServletRequest request) {
    String ip1 = request.getHeader("x-forwarded-for");
    String ip2 = request.getRemoteHost();
    // 以x-forwarded-for為第一優(yōu)先級
    return Stream.of(ip1, ip2).filter(StrUtil::isNotBlank).findFirst().orElse(null);
}

具體代碼地址(持續(xù)更新哦)

https://gitee.com/slackwareer/tyj-springboot

分享到:
標簽:Java
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰(zhàn)2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定