SpringBoot+Mybatis项目(二)ThreadLocal管理用户

1、使用ThreadLocal管理用户对象,创建工具类。此类getCurrentUser方法可在任意类中调用获取当前登录信息,当然此信息需借助spring的拦截器进行设置用户和删除用户。

public class ThreadLocalUtil {

    /**
     * 保存用户对象的ThreadLocal  在拦截器操作 添加、删除相关用户数据
     */
    private static final ThreadLocal<SysUser> userThreadLocal = new ThreadLocal<SysUser>();

    /**
     * 添加当前登录用户方法  在拦截器方法执行前调用设置获取用户
     * @param sysUser
     */
    public static void addCurrentUser(SysUser sysUser){
//        System.out.println("当前用户"+sysUser.getUserUserName());
        userThreadLocal.set(sysUser);
    }

    /**
     * 获取当前登录用户方法
     */
    public static SysUser getCurrentUser(){
        return userThreadLocal.get();
    }


    /**
     * 删除当前登录用户方法  在拦截器方法执行后 移除当前用户对象
     */
    public static void remove(){
        userThreadLocal.remove();
    }
}

2、新建spring拦截器,在请求前的方法中设置用户对象,在请求后的方法中删除用户对象。

@Component
public class SysInterceptor implements HandlerInterceptor {

    /**
     * 请求执行前执行的
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println("拦截器执行------");
        /**
         * 请求前设置过滤
         */
        SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser");
        ThreadLocalUtil.addCurrentUser(sysUser);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        /**
         * 请求后执行
         */
        ThreadLocalUtil.remove();
    }
}

3、可结合文章一种的用户对象,修改preInsert、preUpdate方法;(备注:此处是新增和修改数据记录操作用户,查询时也可根据此用户判断数据级权限。)

 

/**
 * 预添加方法
 */
public void preInsert(){
    this.setCreateDate(new Date());
    this.setId(IdGen.uuid());
    this.setUpdateDate(new Date());
    //当前创建人
    this.setCreateBy(ThreadLocalUtil.getCurrentUser().getId());
    //当前更新人
    this.setUpdateBy(ThreadLocalUtil.getCurrentUser().getId());
}

备注:文章一链接:https://blog.csdn.net/a718089112/article/details/103888543

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a718089112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值