日志保存取真实IP存在bug
jeesite中的StringUtils类中,取真实IP的方法如下:
public static String getRemoteAddr(HttpServletRequest request){
String remoteAddr = request.getHeader("X-Real-IP");
if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("X-Forwarded-For");
}else if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("Proxy-Client-IP");
}else if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("WL-Proxy-Client-IP");
}
return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
}
两个else if 判断有问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
楼上写的好详细可以格式乱了点
楼上写的好详细可以格式乱了点
两个else if永远不会走
回复
如果remoteAddr = request.getHeader("X-Real-IP");为空了就走到了.这个要看前置代理如何配置的了.实际上这个应该在最后比较合理. 但如果已经确定了前置是nginx或就是配置了x-real-ip的话,这么写也是没有问题的.因为默认nginx只有x-real-ip
这个类放在StringUtils而不是HttpUtils,我感觉别扭、不是很好,按我的思维来说,想到获取HTTP客户端的地址就会想起HTTP,那就知道直接HttpXXUtils。
这种通用工具类,有bug的情况相对较少,只能说可能存在不完备的地方,以下是之前写的一个方法,权当抛砖引玉