mybatis plus 字段加密,查询时解密
时间: 2024-10-23 12:05:43 浏览: 31
MyBatis-plus 模糊查询的使用
Mybatis Plus 提供了对字段加密的功能,通常通过第三方库如 Shiro 或 EasyCrypt 进行数据加密。当需要对数据库中的敏感信息(如密码、手机号等)进行存储时,可以配置 Mybatis Plus 在插入和更新时自动加密,在查询时则自动解密,使得数据在传输过程中保持安全。
具体操作步骤如下:
1. **添加依赖**:首先需要在项目中引入相应的加密库,例如 Spring Security 的 Shiro 或 EasyCrypto。
2. **配置加密规则**:在全局配置文件(如 GlobalConfig.java 或 application.yml)中,设置加密器(Encryptor)的实现,并配置默认的加密策略,例如密钥、算法等。
```java
// GlobalConfig.java
@Configuration
public class GlobalConfig extends BaseGlobalConfig {
@Override
public void configEncrypt(MybatisPlusProperties properties) {
properties.getDatabase().setEncrypt(true);
properties.getDatabase().getEncrypt().setColumnEncryptType(ColumnEncryptType.SM4);
// 如果使用 Shiro,则注入 Shiro 的 Encryptor 实现
properties.getDatabase().getEncrypt().setEncryptAlgorithm("AES");
properties.getDatabase().getEncrypt().setEncryptColumn("password"); // 需要加密的字段名
}
}
```
3. **数据操作**:当你执行 CRUD 操作(增删改查)时,Mybatis Plus 会在插入和更新操作时自动调用加密器对指定字段加密,而在查询时会自动调用解密器进行还原。
4. **查询时解密**:在 SQL 查询语句中,Mybatis Plus 会根据配置自动生成解密表达式,所以在获取到结果集后,不需要额外处理,数据已经是解密后的原始值。
如果你需要手动进行解密,可以在服务层代码中处理查询结果,例如:
```java
List<User> users = userMapper.selectBySomeCondition();
for (User user : users) {
String decryptedPassword = decrypt(user.getPassword()); // 使用自定义的解密函数
user.setPassword(decryptedPassword); // 更新解密后的密码
}
```
阅读全文