写点什么

对某个通用字段进行加解密或者是脱敏处理

作者:想要飞的猪
  • 2024-04-13
    广东
  • 本文字数:1563 字

    阅读完需:约 5 分钟

根据 mybatis 的 TypeHandler 进行对字段进行插入前与查询后进行相关处理 1、 创建 handler 类实现接口 TypeHandler,并实现相关方法


 /**   * 根据typehandler 进行字段的 加密 或者是脱敏处理   */  @MappedJdbcTypes(JdbcType.VARCHAR)  public class MybatisAESHandler implements TypeHandler<String> {          /**       * 表示插入数据库之间进行的操作(可以进行加密或者是模糊处理)       * @param parameter       * @param jdbcType       * @throws SQLException       */    @Override      public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {              if (parameter != null){                  String nParameter = Base62.encode(parameter);    //                String nParameter = Base62.decode(parameter);                  ps.setString(i,nParameter);              }      }        /***       * 根据列名称来获取数据时       * @param resultSet       * @param s       * @return       * @throws SQLException       */    @Override      public String getResult(ResultSet resultSet, String columnName) throws SQLException {          String result = resultSet.getString(columnName);          // 可以在此进行 脱敏处理 或者是解密等等          return result == null?null:Base62.decodeStr(result);      }        /***       * 根据列索引来获取数据时       * @param resultSet       * @param       * @return       * @throws SQLException       */    @Override      public String getResult(ResultSet resultSet, int i) throws SQLException {          String result = resultSet.getString(i);          // 可以在此进行 脱敏处理 或者是解密等等          return result == null?null:Base62.decodeStr(result);      }        /**       *  针对 CallableStatement 根据列索引获取数据时       * @param callableStatement       * @param i       * @return       * @throws SQLException       */    @Override      public String getResult(CallableStatement callableStatement, int i) throws SQLException {          String result = callableStatement.getString(i);          // 可以在此进行 脱敏处理 或者是解密等等          return result == null?null:Base62.decodeStr(result);      }  }
复制代码


2、编写对应的 xml(以 email 为列,查询结果要用 resultMap 映射,特别注意 autoMapping=true 是关键)


  <resultMap id="user" type="com.yfzb.test.entity.User" autoMapping="true">      <result typeHandler="com.yfzb.commom.handler.MybatisAESHandler" column="email" property="email"></result>  </resultMap>    <select id="selectAll" resultMap="user">      select  * from user where  id > 99;  </select>
复制代码


3、利用 mybatis-plus 相关注解实现(同样 autoResultMap = true 也是必须的),在需要处理的字段上加入 typeHandler 就可以实现相应的逻辑


@Data  @TableName(value = "cust",autoResultMap = true)  public class User implements Serializable {        private static final long serialVersionUID = 1L;      /**       * 主键ID       */    private Long id;      /**       * 邮箱       */      @TableField(typeHandler = MybatisAESHandler.class)      private String email;        /**       * 姓名       */      private String name;      /**       * 年龄       */      private Integer age;    }
复制代码


用户头像

还未添加个人签名 2020-06-05 加入

还未添加个人简介

评论

发布
暂无评论
对某个通用字段进行加解密或者是脱敏处理_数据脱敏_想要飞的猪_InfoQ写作社区