Closed Astrsea closed 6 months ago
复现了一下最新版3.5.6也存在这个问题
问题发生在AbstractWrapper.addCondition()和AbstractWrapper.formatParam()中,本应该拼接成 system_key=#{systemKey,typeHandler=cloud.astrsea.preprocessing.handler.AESEncryptHandler},却拼接成system_key=#{ew.paramNameValuePairs.MPGENVAL1}
问题发生在AbstractWrapper.addCondition()和AbstractWrapper.formatParam()中,本应该拼接成 system_key=#{systemKey,typeHandler=cloud.astrsea.preprocessing.handler.AESEncryptHandler},却拼接成system_key=#{ew.paramNameValuePairs.MPGENVAL1}
那这个应该怎么处理
问题发生在AbstractWrapper.addCondition()和AbstractWrapper.formatParam()中,本应该拼接成 system_key=#{systemKey,typeHandler=cloud.astrsea.preprocessing.handler.AESEncryptHandler},却拼接成system_key=#{ew.paramNameValuePairs.MPGENVAL1}
那这个应该怎么处理
我不知道这个是特性还是bug,@nieqiurong 如果是bug的话,希望能让我提交pr
使用姿势不对吧。看代码注释说typeHandler要配合 TableName.autoResultMap() 一起使用
使用姿势不对吧。看代码注释说typeHandler要配合 TableName.autoResultMap() 一起使用
我这边在mapper里面用了,所以autoResultMap = true可以不使用
<result property="systemKey" column="system_key" jdbcType="VARCHAR" typeHandler="cloud.astrsea.preprocessing.handler.AESEncryptHandler"/>
新版本查询有说支持query自动调用handler吗?看原来issue用法如下: https://github.com/baomidou/mybatis-plus/blob/3.0/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java testLambdaTypeHandler
QueryWrapper
我已找到select自动调用handler的方法
@miemieYaho 那能否让LambdaQueryWrapper中自动handler,使查询值自动加密,实现加密字段的查询
用wrapper.apply("cert_no={0,typeHandler="+ EncryptHandler.class.getCanonicalName()+ "}", "test1234");
用wrapper.apply("cert_no={0,typeHandler="+ EncryptHandler.class.getCanonicalName()+ "}", "test1234");
为什么要使用这种复杂又难写的方式呢,如果能自动适配不是更好?是考虑什么原因
当前使用版本(必填,否则不予处理)
该问题是如何引起的?(确定最新版也有问题再提!!!)
用原始数据查询数据时,无法自动将查询条件中的数据进行加密处理 ,但是列表查询时能自动解密插入时能自动加密
原因:
LambdaQueryWrapper中的eq方法无法对加@TableField(value = "system_key",typeHandler = AESEncryptHandler.class)进行加密处理
列表查询时:
结果(能自动进行解密处理):
插入时:
能自动进行加密处理
重现步骤(如果有就写完整)
Server
AESEncryptHandler 代码:
实体类中加密属性:
Mapper.xml:
请求参数
报错信息
数据未被加密