欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Springboot3 ThreadLocal存储公共数据填充

Springboot3 ThreadLocal存储公共数据填充

2025/5/2 16:08:53 来源:https://blog.csdn.net/qq_36729594/article/details/141194425  浏览:    关键词:Springboot3 ThreadLocal存储公共数据填充

一、创建ThreadLocal类

package com.lingyang.system.util.thread;import com.lingyang.system.data.vo.admin.AdminDetailVO;/*** @author **文* @Description:* @createDate 2024/8/14 16:01**/
public class AdminThreadLocal {private static ThreadLocal<AdminDetailVO> AdminThreadLocal = new ThreadLocal<>();/*** 添加当前登录用户方法  在拦截器方法执行前调用设置获取用户* @param admin*/public static void addCurrentUser(AdminDetailVO admin){AdminThreadLocal.set(admin);}/*** 获取当前登录用户方法*/public static AdminDetailVO getCurrentUser(){return AdminThreadLocal.get();}/*** 删除当前登录用户方法  在拦截器方法执行后 移除当前用户对象*/public static void remove(){AdminThreadLocal.remove();}}

二、拦截器中进程结束删除ThreadLocal中的数据

@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("afterCompletion---------------");AdminThreadLocal.remove();}

三、拦截器中通过token获取用户数据并存储

用普通的用户数据、admin详情实例

四、原数据中填充用户数据

package com.lingyang.system.util.mybatisplus.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.lingyang.system.data.vo.admin.AdminDetailVO;
import com.lingyang.system.util.thread.AdminThreadLocal;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;/*** @author 黑锦鲤* @Description:* @createDate 2024/7/22 9:44**/
@Component
public class MyMetaObjecthandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {AdminDetailVO currentUser = AdminThreadLocal.getCurrentUser();if(currentUser != null){this.strictInsertFill(metaObject,"createById", Long.class, currentUser.getId());this.strictInsertFill(metaObject,"createBy", String.class, currentUser.getName());}this.strictInsertFill(metaObject,"createTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {AdminDetailVO currentUser = AdminThreadLocal.getCurrentUser();if(currentUser != null){this.strictUpdateFill(metaObject,"updateById", Long.class, currentUser.getId());this.strictUpdateFill(metaObject,"updateBy", String.class, currentUser.getName());}this.strictUpdateFill(metaObject,"updateTime", LocalDateTime.class, LocalDateTime.now());}}

五、原数据的处理

package com.lingyang.system.util.mybatisplus.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;import java.time.LocalDateTime;/*** @author 黑锦鲤* @Description:* @createDate 2024/7/22 10:03**/
@Data
public class BaseEntity {@TableField(fill = FieldFill.INSERT)private String createBy;@TableField(fill = FieldFill.INSERT)private Long createById;@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.UPDATE)private String updateBy;@TableField(fill = FieldFill.UPDATE)private Long updateById;@TableField(fill = FieldFill.UPDATE)private LocalDateTime updateTime;}

 

数据填充完成

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词