Fix: IP - real IP address cannot be obtained when using reverse proxy bug #19

Merged
FatttSnake merged 1 commits from FatttSnake into dev 2024-03-26 14:22:13 +08:00
3 changed files with 32 additions and 5 deletions
Showing only changes of commit 555877770d - Show all commits

View File

@@ -49,7 +49,7 @@ class SysLogInterceptor(
requestUri = URI(request.requestURI).path requestUri = URI(request.requestURI).path
requestParams = formatParams(request.parameterMap) requestParams = formatParams(request.parameterMap)
requestMethod = request.method requestMethod = request.method
requestIp = request.remoteAddr requestIp = WebUtil.getRequestIp(request)
requestServerAddress = "${request.scheme}://${request.serverName}:${request.serverPort}" requestServerAddress = "${request.scheme}://${request.serverName}:${request.serverPort}"
userAgent = request.getHeader("User-Agent") userAgent = request.getHeader("User-Agent")
} }

View File

@@ -165,7 +165,7 @@ class AuthenticationServiceImpl(
LocalDateTime.now(ZoneOffset.UTC).toInstant(ZoneOffset.UTC).toEpochMilli() LocalDateTime.now(ZoneOffset.UTC).toInstant(ZoneOffset.UTC).toEpochMilli()
}-${UUID.randomUUID()}-${UUID.randomUUID()}-${UUID.randomUUID()}" }-${UUID.randomUUID()}-${UUID.randomUUID()}-${UUID.randomUUID()}"
userService.update(KtUpdateWrapper(User()).eq(User::id, user.id).set(User::forget, code)) userService.update(KtUpdateWrapper(User()).eq(User::id, user.id).set(User::forget, code))
sendRetrieveMail(user.username!!, request.remoteAddr, code, forgetParam.email!!) sendRetrieveMail(user.username!!, WebUtil.getRequestIp(request), code, forgetParam.email!!)
} }
@Transactional @Transactional
@@ -197,7 +197,7 @@ class AuthenticationServiceImpl(
WebUtil.offlineUser(redisUtil, user.id!!) WebUtil.offlineUser(redisUtil, user.id!!)
sendPasswordChangedMail(user.username!!, request.remoteAddr, userInfo!!.email!!) sendPasswordChangedMail(user.username!!, WebUtil.getRequestIp(request), userInfo!!.email!!)
} }
@EventLogRecord(EventLog.Event.LOGIN) @EventLogRecord(EventLog.Event.LOGIN)
@@ -377,9 +377,9 @@ class AuthenticationServiceImpl(
} }
} }
logger.info("用户登录 [用户名: '{}', IP: '{}']", loginUser.username, request.remoteAddr) logger.info("用户登录 [用户名: '{}', IP: '{}']", loginUser.username, WebUtil.getRequestIp(request))
userService.update(User().apply { userService.update(User().apply {
currentLoginIp = request.remoteAddr currentLoginIp = WebUtil.getRequestIp(request)
currentLoginTime = LocalDateTime.now(ZoneOffset.UTC) currentLoginTime = LocalDateTime.now(ZoneOffset.UTC)
lastLoginIp = loginUser.user.currentLoginIp lastLoginIp = loginUser.user.currentLoginIp
lastLoginTime = loginUser.user.currentLoginTime lastLoginTime = loginUser.user.currentLoginTime

View File

@@ -76,4 +76,31 @@ object WebUtil {
redisUtil.delObject(keys) redisUtil.delObject(keys)
} }
/**
* Get real request IP
*
* @param request HttpServletRequest object
* @return IP address
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
* @see HttpServletRequest
*/
fun getRequestIp(request: HttpServletRequest): String {
var ip = request.getHeader("X-Real-IP")
if (!ip.isNullOrBlank() && !"unknown".equals(ip, true)) {
return ip
}
ip = request.getHeader("X-Forwarded-For")
return if (!ip.isNullOrBlank() && !"unknown".equals(ip, true)) {
val index = ip.indexOf(",")
if (index != -1) {
ip.substring(0, index)
} else {
ip
}
} else {
request.remoteAddr
}
}
} }