mybatis-plus拦截器+token自动填充创建人,更新人

1、新建类BaseContext
在这里插入图片描述

package com.example.springbootmybatisplus.utils;

public class BaseContext {
    private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();

    public static void setUserId(Integer id){
        threadLocal.set(id);
    }

    public static Integer getUserId(){
        return threadLocal.get();
    }

    public static void remove(){
        threadLocal.remove();
    }

}

2、拦截器模块

package com.example.springbootmybatisplus.handler;
import com.example.springbootmybatisplus.config.JwtUtil;
import com.example.springbootmybatisplus.utils.BaseContext;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Header;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class InterceptorPre implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler)
            throws Exception {
        String token=request.getHeader("token");
        String verifyToken= JwtUtil.verify(token);
//        return true;
        if(verifyToken=="Success"){
            Integer userId=(Integer)JwtUtil.getTokenInform(token).get("userId");
//            request.getSession().setAttribute("createPersonId",createPersonId);
            BaseContext.setUserId(userId);
            return true;
        } else if(verifyToken=="tokenIsNull"){
            throw new Exception("noToken");
        } else {
            return false;
        }
        //System.out.println("处理器前方法");
        // 返回true,不会拦截后续的处理

    }

    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        // System.out.println("处理器后方法");
        log.info("处理后");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        log.info("处理完成");
        BaseContext.remove();
//        log.error("",ex);
        //System.out.println("处理器完成方法");
    }
}

3、实体类填充字段

package com.example.springbootmybatisplus.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.example.springbootmybatisplus.utils.BaseContext;
import com.jfinal.template.ext.directive.Str;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestHeader;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Date;

@Slf4j
@Component //一定不要忘记把处理器加到IOC容器中
public class MyDataObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill");
        //setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("createTime", LocalDateTime.now(),metaObject);
        this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
        this.setFieldValByName("createBy", BaseContext.getUserId(),metaObject);
        this.setFieldValByName("updateBy", BaseContext.getUserId(),metaObject);
    }
    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill");
        this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
        this.setFieldValByName("updateBy", BaseContext.getUserId(),metaObject);
    }
}

4、实体类

package com.example.springbootmybatisplus.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

@TableName("user")
@Data
public class User {
  //对应数据库的主键(uuid,自增id,雪花算法,redis,zookper)
  @TableId(type = IdType.AUTO)
  private Integer id;

  @NotNull
  private String name;

//  @Min(value = 10,message = "最小值10")
//  @Max(value = 90,message = "最大值为99")
  @NotNull
  private Integer age;
  @NotNull
  private String email;


  //逻辑删除字段
  @TableLogic //逻辑删除注解
  private Integer deleted;

  //字段添加填充内容
  //策略
//  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  @TableField(fill = FieldFill.INSERT)

  @DateTimeFormat(pattern = "yyyy-MM-dd")
  @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
  private LocalDateTime createTime;
  //策略
//  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

  @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private LocalDateTime updateTime;

  @TableField(fill = FieldFill.INSERT)
  private Integer createBy;

  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Integer updateBy;

  @Version//乐观锁注解
  private Integer version;

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员阿明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值