不久前,它恰好是由公司处理的。客户要求系统的敏感字段使用国家秘密SM4算法进行加密,并且在数据库中需要加密数据。由于公司的耐用层使用Hibernate,因此使用Hibernate的拦截器来解密数据阅读,并使用数据阅读,并且当数据持续时,数据将加密。
1.在敏感的物理类别上添加恰好注射。您可以将物理类别划分以通过注释加密。
2.敏感的物理类的字段还需要添加加密注入,需要区分哪些字段。
3.使用冬眠的拦截器的相应事件,以获取需要通过反射处理的物理类和字段,并在拦截器相应的方法前加密数据。数据已解密。
Hibernate定义了一个位于位置的拦截器,可提供一系列拦截器。有关详细信息,您可以查看官方网站文档
但是,如果直接实现它,我们还需要实现接口下方的所有方法,Hibernate为我们提供了空气拦截器。因此,不需要所有接口方法。我们可以定义一个类来继承空拦截器并根据需要重写在空拦截器中提供的方法。
这里只有三种方法,即在初始化之前,保存之前,在更新对象之前打电话。应注意,该方法在保存时不参考调用,但在Hibernate执行插入操作时,请参考调用更新操作的相应拦截方法是OnflushDirty。该方法可以在官方网站文档中找到:
在保存对象之前调用。拦截器可以修改该截距,该截距将用于SQL并传播到持久对象。
初始化之前的onload呼叫。拦截器可能会更改状态,并且状态将被扩散到持久的对象。请注意,当您调用此方法时,实体将是此类的无e空实例。一旦呼叫,请在保存对象之前进行调用。拦截器可以修改状态,该状态将用于SQL插入并扩散到长期的对象。当对象在洗涤过程中变脏时,请调用flushdirt。请注意,请注意,并非所有刷新都以与数据库的实际同步结束。在这种情况下,新的电流将扩展到对象,但可能不会传输到数据库。强烈建议拦截器不应修改先前的状态。您需要解决解决方案的解决方案的解决方案的解决方案。投标溶液溶液溶液的溶液的溶液。
是否需要通过解密处理来解密混合物理类中的字段
将注释添加到物理课上
实施拦截器拦截器代码块
由于国家秘密SM4需要引用其他罐子并需要使用加密机器,因此此处使用了RSA不对称加密替换。
您还需要将配置添加到配置文件中才能引用Hibernate的拦截器
其他DAO,服务和控制器只是简单地实现了查询并保存界面,省略了一些代码
实际上,这个想法不是很普遍,尤其是如果代码中有一个本机SQL方法,那么处理将更加麻烦,但是如果它只是一个需要加密和解密的单个物理类的敏感领域,则是一个更方便的方法来处理它。
还有另一种实施方式。您可以使用Hibernate的侦听器监视各种事件来处理数据。此外,请附上本文的源代码地址。