WhiteDG / mybatis-crypto

🔐 A mybatis-based crypto plugin
Apache License 2.0
72 stars 20 forks source link

请问mapped-key-prefixes的具体作用是什么呢,是为了防止多次加密吗还是有其他的具体作用,我看了源码对于这个还是不太了解其作用 #11

Closed changhui666 closed 1 year ago

WhiteDG commented 1 year ago

作用就是为了按 @Param 参数名的前缀找到需要加密的参数 如果是像 int insert(User user); 这样的代码,只有实体类一个参数,在拦截器里面获取到的参数就是 User 对象,而如果是像 int insert(@Param(et) User user); 这样的,在拦截器里面获取的参数对象是 HashMap<String, Object>,因此这里用 mapped-key-prefixes 标记的前缀来匹配需要加密的参数,其实我也可以遍历所有参数将需要加密的参数缓存起来,这样就不用 mapped-key-prefixes 了,后面会考虑优化这里。

changhui666 commented 1 year ago

AbsEncryptionPlugin类中,注释掉mapped-key-prefixes相关代码,改成下面这样的也可以呀,而且源码中只有这一处用到了mapped-key-prefixes这个参数,不知这样改有什么bug吗。 image

WhiteDG commented 1 year ago

对,你可以这样改,这样的话就不会对参数做判断,只是多执行几次下面的代码而已,对结果没有影响

changhui666 commented 1 year ago

还有一个问题,就是mybatis-crypto-spring-boot-starter模块里面的MybatisCryptoInitializer类感觉没什么用啊,去掉也能正常执行 image

WhiteDG commented 1 year ago

你可以看一下 MybatisCryptoInitializer 这个类的代码,作用就是如果你通过 mybatis-crypto.type-packages 指定了加密类的路径,它会提前把加密类和加密字段加载到缓存中。

changhui666 commented 1 year ago

哦哦,看到了,我忘了EncryptorProvider有缓存了。看你的代码收获很多,谢谢啦

WhiteDG commented 1 year ago

客气了,有帮到你就好😁