提交 200471e8 authored 作者: 黄承天's avatar 黄承天

fix(user):新增静态方法findNowUserId()获取当前登录用户id(只要id而不用整个信息对象) 静态方法无需依赖注入 避免循环依赖

上级 c99571aa
......@@ -3,7 +3,6 @@ package org.matrix.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.matrix.local.service.impl.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
......@@ -30,8 +29,7 @@ public class MetaFieldHandler implements MetaObjectHandler {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
//插入创建用户 与 更新用户id
String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId();
Long loginUserId = UserService.getSessionMap().getOrDefault(sessionId, 0L);
Long loginUserId = UserService.findNowUserId();
this.strictInsertFill(metaObject, "createUserId", Long.class, loginUserId);
this.strictInsertFill(metaObject, "updateUserId", Long.class, loginUserId);
}
......@@ -45,9 +43,7 @@ public class MetaFieldHandler implements MetaObjectHandler {
// 修改 更新时间
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// 修改 更新用户
String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId();
Long loginUserId = UserService.getSessionMap().getOrDefault(sessionId, 0L);
Long loginUserId = UserService.findNowUserId();
this.strictUpdateFill(metaObject, "updateUserId", Long.class, loginUserId);
}
}
......@@ -59,8 +59,9 @@ public class UserService extends ServiceImpl<UserMapper, User> implements IUserS
* @param user 用户信息对象
*/
public void create(User user) {
if (nonNull(user)) {
//检查是否附带了id
Optional.ofNullable(user).map(User::getId)
Optional.of(user).map(User::getId)
.ifPresent(id -> {
throw new RuntimeException("新增数据不可附带id");
});
......@@ -73,6 +74,7 @@ public class UserService extends ServiceImpl<UserMapper, User> implements IUserS
userMapper.insert(user);
log.info("[用户] 新增用户 : {}", user.getAccount());
}
}
/**
* 修改用户
......@@ -167,7 +169,6 @@ public class UserService extends ServiceImpl<UserMapper, User> implements IUserS
@Getter
private static Map<String, Long> sessionMap = new HashMap<>();
/**
* 用户登录
* 用户登录成功后 缓存其对应的sessionId到Map中
......@@ -238,6 +239,24 @@ public class UserService extends ServiceImpl<UserMapper, User> implements IUserS
return findNow(sessionId);
}
/**
* 查询当前登录的用户id
* 根据sessionId查出其当前登录的user的id
* sessionId从上下文中取 无需输入
* 如果没有session信息则返回0
* 该方法为静态方法 无需依赖注入
*
* @return 当前登录的user的信息
*/
public static Long findNowUserId() {
try {
String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId();
return sessionMap.getOrDefault(sessionId, 0L);
} catch (Exception e) {
return 0L;
}
}
/**
* 登出用户
* 输入sessionId 清除其在Map中的信息
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论