feat(service): 使用 RequestIpUtils 统一解析客户端真实 IP
This commit is contained in:
@@ -13,6 +13,7 @@ import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
||||
import com.yolo.keyborad.service.IAppleService;
|
||||
import com.yolo.keyborad.service.KeyboardUserLoginLogService;
|
||||
import com.yolo.keyborad.service.UserService;
|
||||
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import io.jsonwebtoken.*;
|
||||
import jakarta.annotation.Resource;
|
||||
@@ -100,7 +101,7 @@ public class AppleServiceImpl implements IAppleService {
|
||||
|
||||
// 记录登录日志
|
||||
try {
|
||||
String ipAddress = request.getRemoteAddr();
|
||||
String ipAddress = RequestIpUtils.resolveClientIp(request);
|
||||
String userAgent = request.getHeader("User-Agent");
|
||||
String platform = "Unknown";
|
||||
String os = "Unknown";
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.yolo.keyborad.service.impl.user.UserInviteCodeBinder;
|
||||
import com.yolo.keyborad.service.impl.user.UserMailVerificationHandler;
|
||||
import com.yolo.keyborad.service.impl.user.UserPasswordHandler;
|
||||
import com.yolo.keyborad.service.impl.user.UserRegistrationHandler;
|
||||
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||
|
||||
/*
|
||||
* @author: ziin
|
||||
@@ -228,7 +229,7 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
|
||||
|
||||
private void recordLoginLogSafely(Long userId, HttpServletRequest request) {
|
||||
try {
|
||||
String ipAddress = request.getRemoteAddr();
|
||||
String ipAddress = RequestIpUtils.resolveClientIp(request);
|
||||
String userAgent = request.getHeader("User-Agent");
|
||||
String platform = resolvePlatform(userAgent);
|
||||
String os = resolveOs(userAgent);
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.yolo.keyborad.model.entity.KeyboardUserInviteCodes;
|
||||
import com.yolo.keyborad.model.entity.KeyboardUserInvites;
|
||||
import com.yolo.keyborad.service.KeyboardUserInviteCodesService;
|
||||
import com.yolo.keyborad.service.KeyboardUserInvitesService;
|
||||
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Date;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -73,7 +74,7 @@ public class UserInviteCodeBinder {
|
||||
userInvite.setInviteCodeId(inviteCode.getId());
|
||||
userInvite.setBindType(MANUAL_BIND_TYPE);
|
||||
userInvite.setBoundAt(new Date());
|
||||
userInvite.setBindIp(request.getRemoteAddr());
|
||||
userInvite.setBindIp(RequestIpUtils.resolveClientIp(request));
|
||||
userInvite.setBindUserAgent(request.getHeader("User-Agent"));
|
||||
userInvite.setInviteType(inviteCode.getInviteType());
|
||||
userInvite.setInviteCode(inviteCode.getCode());
|
||||
@@ -95,4 +96,3 @@ public class UserInviteCodeBinder {
|
||||
inviteCodesService.updateById(inviteCode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
47
src/main/java/com/yolo/keyborad/utils/RequestIpUtils.java
Normal file
47
src/main/java/com/yolo/keyborad/utils/RequestIpUtils.java
Normal file
@@ -0,0 +1,47 @@
|
||||
package com.yolo.keyborad.utils;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
public final class RequestIpUtils {
|
||||
|
||||
private static final String HEADER_X_FORWARDED_FOR = "X-Forwarded-For";
|
||||
private static final String HEADER_X_REAL_IP = "X-Real-IP";
|
||||
private static final String UNKNOWN_IP = "unknown";
|
||||
|
||||
private RequestIpUtils() {
|
||||
}
|
||||
|
||||
public static String resolveClientIp(HttpServletRequest request) {
|
||||
String forwardedFor = request.getHeader(HEADER_X_FORWARDED_FOR);
|
||||
String forwardedIp = extractForwardedIp(forwardedFor);
|
||||
if (forwardedIp != null) {
|
||||
return forwardedIp;
|
||||
}
|
||||
|
||||
String realIp = request.getHeader(HEADER_X_REAL_IP);
|
||||
if (isValidIp(realIp)) {
|
||||
return realIp.trim();
|
||||
}
|
||||
|
||||
return request.getRemoteAddr();
|
||||
}
|
||||
|
||||
private static String extractForwardedIp(String forwardedFor) {
|
||||
if (!StringUtils.hasText(forwardedFor)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String[] ipList = forwardedFor.split(",");
|
||||
for (String ip : ipList) {
|
||||
if (isValidIp(ip)) {
|
||||
return ip.trim();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean isValidIp(String ip) {
|
||||
return StringUtils.hasText(ip) && !UNKNOWN_IP.equalsIgnoreCase(ip.trim());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user