业务布景:
关于一些灵敏字段,咱们需求在新增修改时,对数据进行加密,在查询的时分,对数据进行解密。
比较low的处理方式:
一般情况下,咱们都是会进行硬编码,在每个需求加解密的办法中,增加密或解密的处理逻辑。这种处理方式,有很大的一个坏处,那就是不行高雅。
今日就教大家一个高雅的处理方式:

继承mybatis的BaseTypeHandler类
mybatis框架中供给了各种数据类型的处理类,这些处理类都继承了BaseTypeHandler类。BaseTypeHandler中有两个重要的办法,分别是:setNonNullParameter,getNullableResult,非空参数给字段赋值,处理可为空的返回值。

mybatis源码中的类型处理器
下面咱们就写一个字段加解密的TypeHandler:
@Component
public class AESEncryptHandler extends BaseTypeHandler {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int columnIndex, Object parameter, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(columnIndex, AESCipher.encrypt(String.valueOf(parameter)));
}
@Override
public Object getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
String columnValue = resultSet.getString(columnName);
return null == columnValue ? null : AESCipher.decrypt(columnValue);
}
@Override
public Object getNullableResult(ResultSet resultSet, int columnName) throws SQLException {
String columnValue = resultSet.getString(columnName);
return null == columnValue ? null : AESCipher.decrypt(columnValue);
}
@Override
public Object getNullableResult(CallableStatement callableStatement, int columnName) throws SQLException {
String columnValue = callableStatement.getString(columnName);
return null == columnValue ? null : AESCipher.decrypt(columnValue);
}
}
在需求处理的字段上进行装备:
< result column=”cardNumber” jdbcType=”VARCHAR” typeHandler=”com.xhx.springboot.convert.AESEncryptHandler”/>
看这样处理是不是简单许多,趁便还解耦了呢!
这无处不在的高雅!

文末总结:
高雅永不过时,关注高雅哥一同学习吧。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。