引入jar包
<dependency>
<groupId>io.github.panlicun</groupId>
<artifactId>mybatisplus-database-encrypt-spring-boot-starter</artifactId>
<version>1.0.6</version>
</dependency>
在yml配置文件中添加配置
enable:如果设置成false,则不启用加密
key:加密算法的key值,如果不填则使用默认的key值进行加密,为了安全起见建议更换。
type:目前工具的加密算法只支持aes、sm4两种,如果不指定类型则默认使用aes方式进行加密
encrypt:
enable: true
key: ENC(ypxav+oeh7K1U73uxaceEsPCy/3VGG8DHv+a8KhagvXkF7X7/oIB6w==) #如果使用aes加密方式,key的长度只支持 16/24/32字节
type: sm4 #目前只支持sm4和aes两种加密方式。如果不填则使用默认(aes)的加密方式
在实体类上实现Encrypted接口,并在要加密的字段上添加注解
@Data
@TableName(value = "test")
public class TestEntity implements Encrypted {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@FieldEncrypt
private String mobile;
}
正常调用接口及可以完成加密
mapper和service层是调用的mybatis-plus的通用mapper和service
public interface TestMapper extends BaseMapper<TestEntity> {
}
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, TestEntity> implements TestService {
}
controller层调用save方法插入数据
@GetMapping("/add")
public R add() {
testService.save(new TestEntity().setMobile("123456"));
return R.ok();
}
看一下数据库的数据
![](https://img-blog.csdnimg.cn/img_convert/47a84c8dbbf3a435de0e62d58df1bd50.png)
查询数据
支持mybatis-plus的单表查询:xxService.lambdaQuery() 、xxService.query()
支持原生mybatis mapper 查询,入参为单一对象的方法: User query(xxDTO dto)
原生mybatis mapper 查询,入参为字符串,如果入参为字符串需要在参数前面添加@Encrypt注解
/**
* 入参为字符串
*/
@Select("select * from test where mobile=#{mobile}")
TestEntity getByPhone1(@Encrypt @Param("mobile") String mobile);
/**
* 入参为对象
*/
TestEntity getByPhone2(TestEntity test);
示例
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private TestService testService;
@GetMapping("/get")
public R get() {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("mobile","123456");
List<TestEntity> list = testService.list(queryWrapper);
return R.ok(list);
}
@GetMapping("/add")
public R add() {
testService.save(new TestEntity().setMobile("123456"));
return R.ok();
}
}