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;
}