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.IAppleService;
|
||||||
import com.yolo.keyborad.service.KeyboardUserLoginLogService;
|
import com.yolo.keyborad.service.KeyboardUserLoginLogService;
|
||||||
import com.yolo.keyborad.service.UserService;
|
import com.yolo.keyborad.service.UserService;
|
||||||
|
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import io.jsonwebtoken.*;
|
import io.jsonwebtoken.*;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
@@ -100,7 +101,7 @@ public class AppleServiceImpl implements IAppleService {
|
|||||||
|
|
||||||
// 记录登录日志
|
// 记录登录日志
|
||||||
try {
|
try {
|
||||||
String ipAddress = request.getRemoteAddr();
|
String ipAddress = RequestIpUtils.resolveClientIp(request);
|
||||||
String userAgent = request.getHeader("User-Agent");
|
String userAgent = request.getHeader("User-Agent");
|
||||||
String platform = "Unknown";
|
String platform = "Unknown";
|
||||||
String os = "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.UserMailVerificationHandler;
|
||||||
import com.yolo.keyborad.service.impl.user.UserPasswordHandler;
|
import com.yolo.keyborad.service.impl.user.UserPasswordHandler;
|
||||||
import com.yolo.keyborad.service.impl.user.UserRegistrationHandler;
|
import com.yolo.keyborad.service.impl.user.UserRegistrationHandler;
|
||||||
|
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author: ziin
|
* @author: ziin
|
||||||
@@ -228,7 +229,7 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
|
|||||||
|
|
||||||
private void recordLoginLogSafely(Long userId, HttpServletRequest request) {
|
private void recordLoginLogSafely(Long userId, HttpServletRequest request) {
|
||||||
try {
|
try {
|
||||||
String ipAddress = request.getRemoteAddr();
|
String ipAddress = RequestIpUtils.resolveClientIp(request);
|
||||||
String userAgent = request.getHeader("User-Agent");
|
String userAgent = request.getHeader("User-Agent");
|
||||||
String platform = resolvePlatform(userAgent);
|
String platform = resolvePlatform(userAgent);
|
||||||
String os = resolveOs(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.model.entity.KeyboardUserInvites;
|
||||||
import com.yolo.keyborad.service.KeyboardUserInviteCodesService;
|
import com.yolo.keyborad.service.KeyboardUserInviteCodesService;
|
||||||
import com.yolo.keyborad.service.KeyboardUserInvitesService;
|
import com.yolo.keyborad.service.KeyboardUserInvitesService;
|
||||||
|
import com.yolo.keyborad.utils.RequestIpUtils;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -73,7 +74,7 @@ public class UserInviteCodeBinder {
|
|||||||
userInvite.setInviteCodeId(inviteCode.getId());
|
userInvite.setInviteCodeId(inviteCode.getId());
|
||||||
userInvite.setBindType(MANUAL_BIND_TYPE);
|
userInvite.setBindType(MANUAL_BIND_TYPE);
|
||||||
userInvite.setBoundAt(new Date());
|
userInvite.setBoundAt(new Date());
|
||||||
userInvite.setBindIp(request.getRemoteAddr());
|
userInvite.setBindIp(RequestIpUtils.resolveClientIp(request));
|
||||||
userInvite.setBindUserAgent(request.getHeader("User-Agent"));
|
userInvite.setBindUserAgent(request.getHeader("User-Agent"));
|
||||||
userInvite.setInviteType(inviteCode.getInviteType());
|
userInvite.setInviteType(inviteCode.getInviteType());
|
||||||
userInvite.setInviteCode(inviteCode.getCode());
|
userInvite.setInviteCode(inviteCode.getCode());
|
||||||
@@ -95,4 +96,3 @@ public class UserInviteCodeBinder {
|
|||||||
inviteCodesService.updateById(inviteCode);
|
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