123
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.cai.manager;
|
||||
|
||||
import com.ruoyi.cai.constant.RedisConstant;
|
||||
import com.ruoyi.cai.domain.UserForbid;
|
||||
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
||||
import com.ruoyi.cai.ws.util.MapGetUtil;
|
||||
import org.redisson.api.RMap;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ForbidCache {
|
||||
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
private String getKey(Integer type){
|
||||
return String.format(RedisConstant.FORBID_CACHE_REDIS,type);
|
||||
}
|
||||
|
||||
public void addForbid(UserForbid userForbid){
|
||||
RMap<Object, Object> redisMap = redissonClient.getMap(getKey(userForbid.getType()));
|
||||
redisMap.put(userForbid.getMember(),userForbid.getId());
|
||||
}
|
||||
|
||||
public Long checkForbid(String member, ForbidTypeEnum forbidTypeEnum){
|
||||
String key = getKey(forbidTypeEnum.getCode());
|
||||
RMap<Object, Object> redisMap = redissonClient.getMap(key);
|
||||
if(!redisMap.containsKey(member)){
|
||||
return null;
|
||||
}
|
||||
Object o = redisMap.get(member);
|
||||
return MapGetUtil.getLong(o);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
package com.ruoyi.cai.manager;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.ruoyi.cai.domain.ForbidFilter;
|
||||
import com.ruoyi.cai.domain.User;
|
||||
import com.ruoyi.cai.domain.UserForbidLog;
|
||||
import com.ruoyi.cai.dto.admin.UserForbidDTO;
|
||||
import com.ruoyi.cai.enums.ForbidTimeEnum;
|
||||
import com.ruoyi.cai.enums.ForbidTypeEnum;
|
||||
import com.ruoyi.cai.service.ForbidFilterService;
|
||||
import com.ruoyi.cai.service.UserForbidLogService;
|
||||
import com.ruoyi.cai.service.UserForbidService;
|
||||
import com.ruoyi.cai.service.UserService;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class UserForbidManager {
|
||||
@Autowired
|
||||
private UserForbidLogService userForbidLogService;
|
||||
@Autowired
|
||||
private UserForbidService userForbidService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private ForbidCache forbidCache;
|
||||
@Autowired
|
||||
private ForbidFilterService forbidFilterService;
|
||||
|
||||
|
||||
/**
|
||||
* 封禁总入口
|
||||
*/
|
||||
public void forbid(UserForbidDTO userForbidDTO){
|
||||
ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidDTO.getForbidTime());
|
||||
ForbidTypeEnum forbidType = ForbidTypeEnum.getByCode(userForbidDTO.getForbidType());
|
||||
if(forbidTime == null || forbidType == null){
|
||||
log.error("封禁入参错误 data={}", JSON.toJSONString(userForbidDTO));
|
||||
return;
|
||||
}
|
||||
User user = null;
|
||||
if(forbidType == ForbidTypeEnum.USER){
|
||||
user = userService.getById(userForbidDTO.getMember());
|
||||
if(user == null){
|
||||
return;
|
||||
}
|
||||
}
|
||||
UserForbidLog userForbidLog = new UserForbidLog();
|
||||
userForbidLog.setType(userForbidDTO.getForbidType());
|
||||
userForbidLog.setMember(userForbidDTO.getMember());
|
||||
userForbidLog.setForbidTime(userForbidDTO.getForbidTime());
|
||||
userForbidLog.setReason(userForbidDTO.getRemark());
|
||||
userForbidLogService.save(userForbidLog);
|
||||
userForbidService.forbid(userForbidLog,user);
|
||||
}
|
||||
|
||||
public CheckForbid checkForbid(Long userId,String IMEI,String ip){
|
||||
ForbidTypeEnum typeEnum;
|
||||
CheckForbid noForbid = CheckForbid.noForbid();
|
||||
String member;
|
||||
Long forbidId;
|
||||
if(userId != null){
|
||||
forbidId = forbidCache.checkForbid(userId + "", ForbidTypeEnum.USER);
|
||||
if(forbidId == null){
|
||||
return noForbid;
|
||||
}
|
||||
member = userId+"";
|
||||
typeEnum = ForbidTypeEnum.USER;
|
||||
String traceId = IdManager.nextIdStr();
|
||||
noForbid = CheckForbid.forbid(traceId);
|
||||
noForbid.setMessage("您的账号已被封禁");
|
||||
|
||||
}else if(IMEI != null){
|
||||
forbidId = forbidCache.checkForbid(IMEI, ForbidTypeEnum.IMEI);
|
||||
if(forbidId == null){
|
||||
return noForbid;
|
||||
}
|
||||
member = IMEI;
|
||||
typeEnum = ForbidTypeEnum.IMEI;
|
||||
String traceId = IdManager.nextIdStr();
|
||||
noForbid = CheckForbid.forbid(traceId);
|
||||
noForbid.setMessage("您的设备已被封禁");
|
||||
}else if(ip != null){
|
||||
forbidId = forbidCache.checkForbid(ip, ForbidTypeEnum.IP);
|
||||
if(forbidId == null){
|
||||
return noForbid;
|
||||
}
|
||||
member = ip;
|
||||
typeEnum = ForbidTypeEnum.IP;
|
||||
String traceId = IdManager.nextIdStr();
|
||||
noForbid = CheckForbid.forbid(traceId);
|
||||
noForbid.setMessage("您的IP已被封禁");
|
||||
}else{
|
||||
return noForbid;
|
||||
}
|
||||
if(noForbid.isForbid()){
|
||||
// 保存拦截记录
|
||||
ForbidFilter filter = new ForbidFilter();
|
||||
filter.setType(typeEnum.getCode());
|
||||
filter.setMember(member);
|
||||
filter.setUserId(userId);
|
||||
filter.setTraceNo(noForbid.getTraceId());
|
||||
filter.setForbidId(forbidId);
|
||||
filter.setFilterReason(noForbid.getMessage());
|
||||
forbidFilterService.addForbidFilter(filter);
|
||||
}
|
||||
return noForbid;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class CheckForbid implements Serializable {
|
||||
// 是否已经被封禁
|
||||
private boolean forbid = false;
|
||||
private String traceId;
|
||||
private String message;
|
||||
|
||||
public static CheckForbid noForbid(){
|
||||
return new CheckForbid();
|
||||
}
|
||||
|
||||
public static CheckForbid forbid(String traceId){
|
||||
CheckForbid checkForbid = new CheckForbid();
|
||||
checkForbid.setForbid(true);
|
||||
checkForbid.setTraceId(traceId);
|
||||
return checkForbid;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user