通过mybatis-plus进行数据库字段加解密方式
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1、编写handler</li><li>2、编写加解密util</li><li>3、实体及字段配置</li><li>4、自定义mapper语句</li><li>总结</li></ul></div><p class="maodian"></p><h2>1、编写handler</h2><div class="jb51code"><pre class="brush:java;">@MappedJdbcTypes(JdbcType.VARCHAR)
public class EncryptHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, String parameter, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, EncryptFieldUtil.encrypt(parameter));
}
@Override
public String getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
return EncryptFieldUtil.decrypt(resultSet.getString(columnName));
}
@Override
public String getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
return EncryptFieldUtil.decrypt(resultSet.getString(columnIndex));
}
@Override
public String getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
return EncryptFieldUtil.decrypt(callableStatement.getString(columnIndex));
}
}
</pre></div>
<p class="maodian"></p><h2>2、编写加解密util</h2>
<div class="jb51code"><pre class="brush:java;">public class EncryptFieldUtil {
/**
* 数据库字段加密key
*/
private static final byte[] KEY = "sdfdfsdfdfghhhss".getBytes(StandardCharsets.UTF_8);
/**
* 加密字段
*/
public static String encrypt(String value) {
if (StrUtil.isBlank(value)) {
return value;
}
AES aes = SecureUtil.aes(KEY);
return aes.encryptHex(value);
}
/**
* 解密字段
*/
public static String decrypt(String value) {
if (null == value) {
return null;
}
try {
return SecureUtil.aes(KEY).decryptStr(value);
} catch (CryptoException e) {
return value;
}
}
}</pre></div>
<p class="maodian"></p><h2>3、实体及字段配置</h2>
<div class="jb51code"><pre class="brush:java;">@TableName(value = "表名", autoResultMap = true)
@TableField(typeHandler = EncryptHandler.class)</pre></div>
<p class="maodian"></p><h2>4、自定义mapper语句</h2>
<div class="jb51code"><pre class="brush:xml;"> <resultMap id="TitlePO" type="com.techhf.tenant.infrastruture.po.TitlePO">
<result column="title_name" property="titleName" typeHandler="com.techhf.common.mybatis.handler.EncryptHandler"/>
</resultMap></pre></div>
<p class="maodian"></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>MyBatis-Plus解决字段不更新为null的六大解决方案</li><li>mybatis-plus查询字段中含有关键词时异常的问题及解决方案</li><li>MyBatis-plus与数据库字段的映射方式</li><li>Mybatis-plus默认不能更新null字段的问题及解决过程</li><li>Mybatis-Plus根据自定义注解实现自动加解密的示例代码</li><li>基于Mybatis-Plus拦截器实现MySQL数据加解密的示例代码</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]