| | |
| | | package com.panzhihua.service_grid.model.helper.sensitive; |
| | | |
| | | import com.panzhihua.common.model.helper.sensitive.Sensitive; |
| | | import com.panzhihua.common.model.helper.sensitive.SensitiveStrategy; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import java.lang.reflect.Field; |
| | | import java.sql.Statement; |
| | | import java.util.List; |
| | | import java.util.stream.Stream; |
| | | |
| | | import org.apache.ibatis.executor.resultset.ResultSetHandler; |
| | | import org.apache.ibatis.plugin.Interceptor; |
| | | import org.apache.ibatis.plugin.Intercepts; |
| | |
| | | import org.springframework.core.annotation.Order; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.sql.Statement; |
| | | import java.util.List; |
| | | import java.util.stream.Stream; |
| | | import com.panzhihua.common.model.helper.sensitive.Sensitive; |
| | | import com.panzhihua.common.model.helper.sensitive.SensitiveStrategy; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * 字段脱敏拦截器 |
| | | * |
| | | * @author cedoo |
| | | * @since 2021-4-1 10:40:52 |
| | | */ |
| | | @Intercepts(@Signature(type = ResultSetHandler.class, |
| | | method = "handleResultSets", |
| | | args = {Statement.class})) |
| | | @Intercepts(@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})) |
| | | @Slf4j |
| | | @ConditionalOnProperty(value = "domain.sensitive", havingValue = "true") |
| | | @Component |
| | |
| | | return records; |
| | | } |
| | | |
| | | |
| | | private void sensitive(Object source) { |
| | | if(source!=null) { |
| | | // 拿到返回值类型 |
| | |
| | | // 初始化返回值类型的 MetaObject |
| | | MetaObject metaObject = SystemMetaObject.forObject(source); |
| | | // 捕捉到属性上的标记注解 @Sensitive 并进行对应的脱敏处理 |
| | | Stream.of(sourceClass.getDeclaredFields()) |
| | | .filter(field -> field.isAnnotationPresent(Sensitive.class)) |
| | | Stream.of(sourceClass.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Sensitive.class)) |
| | | .forEach(field -> doSensitive(metaObject, field)); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void doSensitive(MetaObject metaObject, Field field) { |
| | | // 拿到属性名 |