在server.xml的 Host节点下配置一个Valve即可。
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
这个原理是利用Tomcat处理请求时的"阀门",Tomcat每次处理请求都会经过系统中所有"阀门",最终到达Servlet,我们可以在这个"阀门"中处理一些逻辑,如记录日志、更改信息等操作。而RemoteIpValve是Tomcat自带的一个"阀门",用来处理相关代理IP的事情。
在RemoteIpValve的invoke方法下会具体处理,找到真实的IP,然后调用request.setRemoteAddr(remoteIp);,这其实是根据X-Forwarded-For头来完成。
加入这个阀门后其实可以直接调用req.getRemoteAddr()来获取,但是前提在Nginx也要配置X-Forwarded-For。
————————————————
版权声明:本文为CSDN博主「HouXinLin_CSDN」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/HouXinLin_CSDN/article/details/107850108※ 修改:·leelou 于 Feb 5 15:30:36 2022 修改本文·[FROM: 101.71.38.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 101.71.38.*]
修改:leelou FROM 101.71.38.*
FROM 101.71.38.*