From 5a57e1438d4682d041933d88fbfa37cbc2e77919 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 14 May 2020 15:40:25 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/test/dto/TestUserDto.java | 6 +- src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java | 2 src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java | 14 ++++ src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java | 106 +++++++++++++++++++++++++++++++++++ src/main/java/com/xcong/excoin/common/LoginUserUtils.java | 17 +++++ 5 files changed, 139 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/LoginUserUtils.java b/src/main/java/com/xcong/excoin/common/LoginUserUtils.java new file mode 100644 index 0000000..7840a12 --- /dev/null +++ b/src/main/java/com/xcong/excoin/common/LoginUserUtils.java @@ -0,0 +1,17 @@ +package com.xcong.excoin.common; + +import com.xcong.excoin.modules.member.entity.MemberEntity; +import org.springframework.security.core.context.SecurityContextHolder; + +/** + * 登陆用户工具类 + * + * @author wzy + * @date 2020-05-14 + **/ +public class LoginUserUtils { + + public static MemberEntity getAppLoginUser() { + return (MemberEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + } +} diff --git a/src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java b/src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java index aa75f57..bb0c3ea 100644 --- a/src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java +++ b/src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java @@ -14,8 +14,6 @@ public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; - private Long id; - private String createBy; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java b/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java index 08aa177..9203353 100644 --- a/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java +++ b/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java @@ -1,10 +1,114 @@ package com.xcong.excoin.configurations.interceptor; +import com.xcong.excoin.common.LoginUserUtils; +import com.xcong.excoin.modules.member.entity.MemberEntity; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.*; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.*; + /** * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间 * * @author wzy * @date 2020-05-13 **/ -public class MybatisInterceptor { +@Slf4j +//@Component +@Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) +public class MybatisInterceptor implements Interceptor { + @Override + public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + String sqlId = mappedStatement.getId(); + log.info("----sqlId----" + sqlId); + SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); + log.info("-------------->{}", sqlCommandType); + + Object parameter = invocation.getArgs()[1]; + if (parameter == null) { + return invocation.proceed(); + } + + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + if (SqlCommandType.INSERT == sqlCommandType) { + Field[] fields = this.getAllFields(parameter); + + for(Field field : fields) { + log.info("----->{}", field.getName()); + if ("createBy".equals(field.getName()) || "updateBy".equals(field.getName())) { + byField(field, parameter, memberEntity); + } + + if ("createTime".equals(field.getName()) || "updateTime".equals(field.getName())) { + timeField(field, parameter, memberEntity); + } + } + } + + if (SqlCommandType.UPDATE == sqlCommandType) { + Field[] fields = this.getAllFields(parameter); + + for (Field field : fields) { + if ("updateBy".equals(field.getName())) { + byField(field, parameter, memberEntity); + } + + if ("updateTime".equals(field.getName())) { + timeField(field, parameter, memberEntity); + } + } + } + + return invocation.proceed(); + } + + @Override + public Object plugin(Object o) { + return Plugin.wrap(o, this); + } + + @Override + public void setProperties(Properties properties) { + + } + + private Field[] getAllFields(Object object) { + Class<?> clazz = object.getClass(); + List<Field> fieldList = new ArrayList<>(); + while (clazz != null) { + fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); + clazz = clazz.getSuperclass(); + } + Field[] fields = new Field[fieldList.size()]; + fieldList.toArray(fields); + return fields; + } + + private void byField(Field field, Object parameter, MemberEntity memberEntity) throws IllegalAccessException { + field.setAccessible(true); + Object local = field.get(parameter); + field.setAccessible(false); + if (local != null) { + field.setAccessible(true); + field.set(parameter, memberEntity.getUsername()); + field.setAccessible(false); + } + } + + private void timeField(Field field, Object parameter, MemberEntity memberEntity) throws IllegalAccessException { + field.setAccessible(true); + Object local_createBy = field.get(parameter); + field.setAccessible(false); + if (local_createBy != null) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } } diff --git a/src/main/java/com/xcong/excoin/modules/test/dto/TestUserDto.java b/src/main/java/com/xcong/excoin/modules/test/dto/TestUserDto.java index c4879a7..fa1d08a 100644 --- a/src/main/java/com/xcong/excoin/modules/test/dto/TestUserDto.java +++ b/src/main/java/com/xcong/excoin/modules/test/dto/TestUserDto.java @@ -17,15 +17,15 @@ @ApiModel(value = "testUser参数接收类", description = "findUserInPage 参数接收类") public class TestUserDto { -// @NotNull(message = "id不能为空") + @NotNull(message = "id不能为空") @ApiModelProperty(value = "这是名字啊", example = "张三") private String name; -// @Length(min = 6, max = 16, message = "账号长度需为6-16位") + @Length(min = 6, max = 16, message = "账号长度需为6-16位") @ApiModelProperty(value = "账号", example = "admin") private String account; -// @NotBlank(message = "密码不能为空") + @NotBlank(message = "密码不能为空") @ApiModelProperty(value = "这是密码字段啊", example = "123456") private String password; diff --git a/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java b/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java index 1ce2e4d..5756df4 100644 --- a/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java +++ b/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java @@ -30,4 +30,18 @@ } + @Test + public void mybatisInterceptorTest() { + TestUserEntity testUser = new TestUserEntity(); + testUser.setCreateBy("123"); + testUser.setCreateTime(new Date()); + testUser.setUpdateBy("123"); + testUser.setUpdateTime(new Date()); + testUser.setAccount("123333345"); + testUser.setName("hehe111"); + testUser.setPassword("33333"); + + testUserDao.insert(testUser); + } + } -- Gitblit v1.9.1