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

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

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