This commit is contained in:
duteliang
2024-02-01 00:50:42 +08:00
parent 43be20b11f
commit 574ef6cfdb
6 changed files with 51 additions and 13 deletions

View File

@@ -91,7 +91,8 @@ public class CaiLoginManager {
if(user == null){ if(user == null){
throw new ServiceException("用户不存在或密码错误"); throw new ServiceException("用户不存在或密码错误");
} }
UserForbidManager.CheckForbid forbid = userForbidManager.checkForbid(user.getId(), user.getUsercode(), null, ServletUtils.getClientIP()); String imei = ServletUtils.getImei();
UserForbidManager.CheckForbid forbid = userForbidManager.checkForbid(user.getId(), user.getUsercode(), imei, ServletUtils.getClientIP());
if(forbid != null && forbid.isForbid()){ if(forbid != null && forbid.isForbid()){
throw new ServiceException(forbid.getMessage()); throw new ServiceException(forbid.getMessage());
} }
@@ -216,7 +217,7 @@ public class CaiLoginManager {
} }
public void recordLoginInfo(User user, String ip) { public void recordLoginInfo(User user, String ip,String imei) {
String address = AddressUtils.getRealAddressByIP(ip); String address = AddressUtils.getRealAddressByIP(ip);
UserInfo userInfo = userInfoService.getById(user.getId()); UserInfo userInfo = userInfoService.getById(user.getId());
UserInfo update = new UserInfo(); UserInfo update = new UserInfo();
@@ -225,6 +226,9 @@ public class CaiLoginManager {
update.setLastLoginIp(ip); update.setLastLoginIp(ip);
update.setLastLoginTime(LocalDateTime.now()); update.setLastLoginTime(LocalDateTime.now());
update.setLastLocation(address); update.setLastLocation(address);
if(StringUtils.isNotBlank(imei)){
update.setImei(imei);
}
userInfoService.updateById(update); userInfoService.updateById(update);
} }
@@ -259,7 +263,8 @@ public class CaiLoginManager {
LoginHelper.login(loginUser); LoginHelper.login(loginUser);
sysLoginService.recordLogininfor(loginUser.getUsername(), UserType.APP_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); sysLoginService.recordLogininfor(loginUser.getUsername(), UserType.APP_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
String clientIP = ServletUtils.getClientIP(); String clientIP = ServletUtils.getClientIP();
ExecutorConstant.COMMON_EXECUTOR.execute(() -> recordLoginInfo(user,clientIP)); String imei = ServletUtils.getImei();
ExecutorConstant.COMMON_EXECUTOR.execute(() -> recordLoginInfo(user,clientIP,imei));
return StpUtil.getTokenValue(); return StpUtil.getTokenValue();
} }

View File

@@ -69,5 +69,9 @@ public class UserInfo {
* 注册时间 * 注册时间
*/ */
private LocalDateTime regTime; private LocalDateTime regTime;
/**
* 设备号
*/
private String imei;
} }

View File

@@ -12,7 +12,8 @@ public class UserForbidInfo {
private UserForbid userForbid; private UserForbid userForbid;
private String userForbidBetween; private String userForbidBetween;
private UserForbid ipUserForbid; private UserForbid ipUserForbid;
private String ipForbidBetween; private String ipForbidBetween;
private UserForbid imeiUserForbid;
private String imeiForbidBetween;
} }

View File

@@ -56,7 +56,15 @@ public class UserForbidManager {
dto.setRemark(userForbidReq.getReason()); dto.setRemark(userForbidReq.getReason());
this.forbid(dto); this.forbid(dto);
}else if(integer == 2){ // 封设备 }else if(integer == 2){ // 封设备
// 封设备 UserInfo userInfo = userInfoService.getByUserId(user.getId());
if(userInfo != null && StringUtils.isNotEmpty(userInfo.getImei())){
UserForbidDTO dto = new UserForbidDTO();
dto.setForbidTime(userForbidReq.getForbidTime());
dto.setForbidType(ForbidTypeEnum.IMEI.getCode());
dto.setMember(userInfo.getImei());
dto.setRemark(userForbidReq.getReason());
this.forbid(dto);
}
}else if(integer == 3){ // 封IP }else if(integer == 3){ // 封IP
UserInfo userInfo = userInfoService.getByUserId(user.getId()); UserInfo userInfo = userInfoService.getByUserId(user.getId());
if(userInfo != null && StringUtils.isNotEmpty(userInfo.getLastLoginIp())){ if(userInfo != null && StringUtils.isNotEmpty(userInfo.getLastLoginIp())){
@@ -113,7 +121,7 @@ public class UserForbidManager {
noForbid = CheckForbid.forbid(traceId); noForbid = CheckForbid.forbid(traceId);
noForbid.setMessage("您的账号已被封禁"); noForbid.setMessage("您的账号已被封禁");
}else if(IMEI != null){ }else if(StringUtils.isNotBlank(IMEI)){
forbidId = forbidCache.checkForbid(IMEI, ForbidTypeEnum.IMEI); forbidId = forbidCache.checkForbid(IMEI, ForbidTypeEnum.IMEI);
if(forbidId == null){ if(forbidId == null){
return noForbid; return noForbid;
@@ -123,7 +131,7 @@ public class UserForbidManager {
String traceId = IdManager.nextIdStr(); String traceId = IdManager.nextIdStr();
noForbid = CheckForbid.forbid(traceId); noForbid = CheckForbid.forbid(traceId);
noForbid.setMessage("您的设备已被封禁"); noForbid.setMessage("您的设备已被封禁");
}else if(ip != null){ }else if(StringUtils.isNotBlank(ip)){
forbidId = forbidCache.checkForbid(ip, ForbidTypeEnum.IP); forbidId = forbidCache.checkForbid(ip, ForbidTypeEnum.IP);
if(forbidId == null){ if(forbidId == null){
return noForbid; return noForbid;

View File

@@ -21,6 +21,7 @@ import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -118,12 +119,23 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
userForbidInfo.setUserForbid(userForbid); userForbidInfo.setUserForbid(userForbid);
userForbidInfo.setUserForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),userForbid.getEndTime())); userForbidInfo.setUserForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),userForbid.getEndTime()));
} }
UserForbid ipUserForbid = this.getOne(Wrappers.lambdaQuery(UserForbid.class) if(StringUtils.isNotBlank(userInfo.getLastLoginIp())){
.eq(UserForbid::getMember, userInfo.getLastLoginIp()) UserForbid ipUserForbid = this.getOne(Wrappers.lambdaQuery(UserForbid.class)
.eq(UserForbid::getType, ForbidTypeEnum.IP.getCode()).last("limit 1")); .eq(UserForbid::getMember, userInfo.getLastLoginIp())
if(ipUserForbid != null && ForbidStatusEnum.FORBID.getCode().equals(ipUserForbid.getForbidStatus()) && ipUserForbid.getEndTime().isAfter(LocalDateTime.now())){ .eq(UserForbid::getType, ForbidTypeEnum.IP.getCode()).last("limit 1"));
userForbidInfo.setIpUserForbid(ipUserForbid); if(ipUserForbid != null && ForbidStatusEnum.FORBID.getCode().equals(ipUserForbid.getForbidStatus()) && ipUserForbid.getEndTime().isAfter(LocalDateTime.now())){
userForbidInfo.setIpForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),ipUserForbid.getEndTime())); userForbidInfo.setIpUserForbid(ipUserForbid);
userForbidInfo.setIpForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),ipUserForbid.getEndTime()));
}
}
if(StringUtils.isNotBlank(userInfo.getImei())){
UserForbid imeiUserForbid = this.getOne(Wrappers.lambdaQuery(UserForbid.class)
.eq(UserForbid::getMember, userInfo.getImei())
.eq(UserForbid::getType, ForbidTypeEnum.IMEI.getCode()).last("limit 1"));
if(imeiUserForbid != null && ForbidStatusEnum.FORBID.getCode().equals(imeiUserForbid.getForbidStatus()) && imeiUserForbid.getEndTime().isAfter(LocalDateTime.now())){
userForbidInfo.setImeiUserForbid(imeiUserForbid);
userForbidInfo.setImeiForbidBetween(CaiDateUtil.betweenShowString(LocalDateTime.now(),imeiUserForbid.getEndTime()));
}
} }
return userForbidInfo; return userForbidInfo;
} }

View File

@@ -20,9 +20,11 @@ import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.attribute.FileTime;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID;
/** /**
* 客户端工具类 * 客户端工具类
@@ -32,6 +34,8 @@ import java.util.Map;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ServletUtils extends ServletUtil { public class ServletUtils extends ServletUtil {
private final static String HEAD_UUID = "uuid";
/** /**
* 获取String参数 * 获取String参数
*/ */
@@ -172,6 +176,10 @@ public class ServletUtils extends ServletUtil {
return getClientIP(getRequest()); return getClientIP(getRequest());
} }
public static String getImei(){
return getRequest().getHeader(HEAD_UUID);
}
/** /**
* 内容编码 * 内容编码
* *