Java獲取客戶(hù)端真實(shí)IP地址經(jīng)典寫(xiě)法與Lambda寫(xiě)法對(duì)比示例代碼
一、經(jīng)典寫(xiě)法
@Autowired
HttpServletRequest request;
String[] IP_HEADERS = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP", "HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR"};
private String getClientIpClassic()
{
log.info("##### Classic");
for (String header : IP_HEADERS)
{
String ip = request.getHeader(header);
if (StringUtils.isNotBlank(ip) && !StringUtils.equalsIgnoreCase("unknown", ip))
{
log.info("##### ip header: {}", header);
String[] ips = ip.split(",");
return ips[0].trim();
}
}
log.info("##### request.getRemoteAddr");
return request.getRemoteAddr();
}
二、Lambda寫(xiě)法
private String getClientIpLambda()
{
log.info("##### Lambda");
return Arrays.stream(IP_HEADERS)
.peek(log::info)
.map(request::getHeader)
.filter(ips -> StringUtils.isNotBlank(ips) && !"unknown".equalsIgnoreCase(ips))
.flatMap(ips -> Arrays.stream(ips.split(",")))
.filter(StringUtils::isNotBlank)
.map(String::trim)
.findFirst()
.orElse(request.getRemoteAddr());
}
三、總結(jié)
到此這篇關(guān)于Java獲取客戶(hù)端真實(shí)IP地址經(jīng)典寫(xiě)法與Lambda寫(xiě)法對(duì)比的文章就介紹到這了,更多相關(guān)Java獲取客戶(hù)端真實(shí)IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java實(shí)現(xiàn)獲取客戶(hù)端真實(shí)IP方法小結(jié)
- Java獲取客戶(hù)端真實(shí)IP地址過(guò)程解析
- Java之獲取客戶(hù)端真實(shí)IP地址的實(shí)現(xiàn)
- Java面試之如何獲取客戶(hù)端真實(shí)IP
- 淺談使用Java Web獲取客戶(hù)端真實(shí)IP的方法示例詳解
- 利用Java獲取被nginx代理的emqx客戶(hù)端真實(shí)ip
- Java獲取客戶(hù)端真實(shí)IP地址經(jīng)典寫(xiě)法詳解
- nginx代理模式下java獲取客戶(hù)端真實(shí)ip地址實(shí)例代碼
相關(guān)文章
Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解
這篇文章主要為大家介紹了Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Spring boot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ioc(2)
這篇文章主要為大家詳細(xì)介紹了Spring boot實(shí)現(xiàn)一個(gè)簡(jiǎn)單ioc的第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Java診斷工具Arthas的快速入門(mén)與實(shí)踐
在Java開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到各種性能問(wèn)題、內(nèi)存泄漏、線(xiàn)程阻塞等問(wèn)題,這些問(wèn)題往往難以通過(guò)常規(guī)的日志和監(jiān)控工具來(lái)定位和解決,Arthas作為一款開(kāi)源的Java診斷工具,提供了強(qiáng)大的實(shí)時(shí)監(jiān)控和診斷功能,本文將詳細(xì)介紹Arthas的安裝、基本使用以及一些常用命令2025-02-02
Java 對(duì)稱(chēng)加密幾種算法分別實(shí)現(xiàn)
這篇文章主要介紹了Java 對(duì)稱(chēng)加密使用DES / 3DES / AES 這三種算法分別實(shí)現(xiàn)的相關(guān)資料,這里提供了實(shí)例代碼,需要的朋友可以參考下2017-01-01
@PathVariable 如何自動(dòng)填充入實(shí)例對(duì)象中
這篇文章主要介紹了@PathVariable 實(shí)現(xiàn)自動(dòng)填充入實(shí)例對(duì)象中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
spring boot使用自定義配置的線(xiàn)程池執(zhí)行Async異步任務(wù)
這篇文章主要介紹了spring boot使用自定義配置的線(xiàn)程池執(zhí)行Async異步任務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
java 多線(xiàn)程死鎖詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了java 多線(xiàn)程死鎖詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn)
這篇文章主要介紹了Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

