关于自定义注解脱敏修改问题

img

我想实现自定义注解脱敏 新增和查看 都是正常的 有办法执行update操作的时候 也对新内容进行加密么

这里修改失败是因为 修改操作并没有传原本的实体类 然后就判断不到有没有注解 这样么?

如果要在执行update操作时对新内容进行加密,需要将原本的实体类传给拦截器。代码中的参数传递是从Invocation.getArgs()[1]获取的,而这里的参数是不包含原本的实体类的,因此导致了加密失败。为了解决这个问题,需要将原本的实体类也传给拦截器。希望对一些敏感数据进行脱敏,比如在执行update操作时也对数据进行加密。

关于如何实现这个需求,可以参考以下步骤:

定义一个自定义注解,用来标识需要脱敏的字段,例如@SensitiveField注解。

在你的代码中使用该注解,标识需要脱敏的字段,例如:

public class User {
    @SensitiveField
    private String password;
    // ...
}

编写一个拦截器,在Mybatis执行update操作之前,拦截请求,并对数据进行脱敏操作,例如:

public Object intercept(Invocation invocation) throws Throwable {
    // 获取 MappedStatement
    MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
    // 获取 SQL 命令类型
    SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
    // 获取参数
    Object parameter = invocation.getArgs()[1];
    // 只对 update 操作进行处理
    if (SqlCommandType.UPDATE.equals(sqlCommandType)) {
        // 获取参数中的所有字段
        Field[] declaredFields = parameter.getClass().getDeclaredFields();
        // 遍历字段,如果该字段使用了@SensitiveField注解,则对该字段的值进行脱敏
        for (Field field : declaredFields) {
            if (field.isAnnotationPresent(SensitiveField.class)) {
                field.setAccessible(true);
                Object value = field.get(parameter);
                // ... 对值进行脱敏操作
                field.set(parameter, 脱敏后的值);
            }
        }
    }
    // 继续执行 update

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^