今天也在写bug! 2023-02-01 11:01 采纳率: 66.7%
浏览 34
已结题

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

img

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

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

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-02-01 12:46
    关注

    如果要在执行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
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元