绑定邀请码 新增设备指纹校验

This commit is contained in:
tianfeng 2025-10-30 15:16:38 +08:00
parent 4c12994010
commit 6145efc7a4
7 changed files with 81 additions and 10 deletions

View File

@ -139,4 +139,13 @@ public interface RegisterDeviceClientApi {
*/ */
@PostMapping("/pageList") @PostMapping("/pageList")
ResultResponse<PageResult<ArchiveDeviceDTO>> pageList(@RequestBody ArchiveDeviceQryCmd query); ResultResponse<PageResult<ArchiveDeviceDTO>> pageList(@RequestBody ArchiveDeviceQryCmd query);
/**
* 获取用户设备指纹唯一标识
*
* @param userId 用户ID
* @return 设备指纹字符串 device_type|request_client|phone_model|ip 拼接而成
*/
@GetMapping("/user/device/fingerprint")
ResultResponse<String> getDeviceFingerprintByUserId(@RequestParam("userId") Long userId);
} }

View File

@ -196,25 +196,25 @@ public class BindInviteCodeExe {
} }
/** /**
* 获取设备ID如果没有则使用userId * 获取设备指纹唯一标识
* @param userId 用户ID * @param userId 用户ID
* @return 设备ID或用户ID * @return 设备指纹字符串或用户ID
*/ */
private String getDeviceId(Long userId) { private String getDeviceId(Long userId) {
try { try {
ResultResponse<String> response = registerDeviceClient.getImeiByUserId(userId); ResultResponse<String> response = registerDeviceClient.getDeviceFingerprintByUserId(userId);
String imei = response != null ? response.getBody() : null; String fingerprint = response != null && response.getStatus() ? response.getBody() : null;
if (StringUtils.isNotBlank(imei)) { if (StringUtils.isNotBlank(fingerprint)) {
log.info("获取到设备ID, userId={}, deviceId={}", userId, imei); log.info("获取到设备指纹, userId={}, fingerprint={}", userId, fingerprint);
return imei; return fingerprint;
} }
} catch (Exception e) { } catch (Exception e) {
log.warn("获取设备ID失败, userId={}, error={}", userId, e.getMessage()); log.warn("获取设备指纹失败, userId={}, error={}", userId, e.getMessage());
} }
// 如果没有设备ID使用userId // 如果没有设备指纹使用userId
log.info("未获取到设备ID使用userId作为设备标识, userId={}", userId); log.info("未获取到设备指纹使用userId作为设备标识, userId={}", userId);
return "USER_" + userId; return "USER_" + userId;
} }

View File

@ -108,4 +108,12 @@ public interface LatestMobileDeviceService extends BaseService<LatestMobileDevic
Set<Long> getImeiUserId(Long userId); Set<Long> getImeiUserId(Long userId);
/**
* 获取用户设备指纹
*
* @param userId 用户ID
* @return 设备指纹字符串
*/
String getDeviceFingerprintByUserId(Long userId);
} }

View File

@ -275,4 +275,40 @@ public class LatestMobileDeviceServiceImpl extends
} }
@Override
public String getDeviceFingerprintByUserId(Long userId) {
if (userId == null) {
return "";
}
LatestMobileDevice device = query()
.eq(LatestMobileDevice::getUserId, userId)
.last(PageConstant.LIMIT_ONE)
.getOne();
if (device == null) {
return "";
}
return buildDeviceFingerprint(
device.getRequestClient(),
device.getPhoneModel(),
device.getIp()
);
}
/**
* 构建设备指纹
*/
private String buildDeviceFingerprint(String requestClient,
String phoneModel, String ip) {
if (StringUtils.isBlank(requestClient)
|| StringUtils.isBlank(phoneModel)
|| StringUtils.isBlank(ip)) {
return "";
}
return requestClient + "|" + phoneModel + "|" + ip;
}
} }

View File

@ -118,4 +118,9 @@ public class RegisterDeviceClientEndpoint implements RegisterDeviceClientApi {
public ResultResponse<PageResult<ArchiveDeviceDTO>> pageList(ArchiveDeviceQryCmd query) { public ResultResponse<PageResult<ArchiveDeviceDTO>> pageList(ArchiveDeviceQryCmd query) {
return ResultResponse.success(registerDeviceClientService.pageList(query)); return ResultResponse.success(registerDeviceClientService.pageList(query));
} }
@Override
public ResultResponse<String> getDeviceFingerprintByUserId(Long userId) {
return ResultResponse.success(registerDeviceClientService.getDeviceFingerprintByUserId(userId));
}
} }

View File

@ -108,4 +108,12 @@ public interface RegisterDeviceClientService {
* @return 设备信息 * @return 设备信息
*/ */
Map<Long, String> mapImeiByIds(Set<Long> userIds); Map<Long, String> mapImeiByIds(Set<Long> userIds);
/**
* 获取用户设备指纹
*
* @param userId 用户ID
* @return 设备指纹字符串
*/
String getDeviceFingerprintByUserId(Long userId);
} }

View File

@ -229,4 +229,9 @@ public class RegisterDeviceClientServiceImpl implements RegisterDeviceClientServ
public Map<Long, String> mapImeiByIds(Set<Long> userIds) { public Map<Long, String> mapImeiByIds(Set<Long> userIds) {
return latestMobileDeviceService.mapImeiByIds(userIds); return latestMobileDeviceService.mapImeiByIds(userIds);
} }
@Override
public String getDeviceFingerprintByUserId(Long userId) {
return latestMobileDeviceService.getDeviceFingerprintByUserId(userId);
}
} }