今天也在写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日

悬赏问题

  • ¥15 用python如何确定子元素在父元素中的位置
  • ¥15 obj文件滤除异常高程
  • ¥15 用mathematicas或者matlab计算三重积分
  • ¥15 Loop unrolling的runtime计算
  • ¥100 NVMe-oF的Target端,开启attr_offload后,测试失败。
  • ¥100 有偿照片马赛克去掉,保留原始数据
  • ¥15 c# winform http报错,如何解决?
  • ¥15 统计软件及应用-r软件
  • ¥15 爬虫返回的js数据结构如何处理
  • ¥15 python初学者中间insert部分不知道怎么写,请教各位中间如何填写。还想问问大家0基础如何入手python和c语言,期待各位的回复和帮助。