本文介绍如何利用Hibernate的事件机制实现实体字段数据的透明加解密。 上面的话有点绕,这里简单说一下思路:通过在实体类(Entity)的属性上添加注解,实现该字段在存取时的数据加解密。这里利用了Hibernate提供的几个Listener来实现,包括:pre-insert、post-insert、post-load。 我们的步骤是:在数据入库前进行加密操作,在从数据库查出来后解密。
[codesyntax lang="java"]
/**
* Copyright © 1998-2015, surenpi.com. All Rights Reserved.
*/
package org.suren.hibernate.po;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
import org.suren.hibernate.annotation.Encrypt;
/**
* @author suren
* @since jdk1.6
* 2015年11月23日
*/
@Entity
public class Student {
@Id
@GenericGenerator(name = "generator", strategy = "uuid.hex")
@GeneratedValue(generator = "generator")
private String id;
@Encrypt
private String name;
private String room;
private String location;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRoom()
{
return room;
}
public void setRoom(String room)
{
this.room = room;
}
public String getLocation()
{
return location;
}
public void setLocation(String location)
{
this.location = location;
}
@Override
public String toString()
{
return "Student [id=" + id + ", name=" + name + ", room=" + room
+ ", location=" + location + "]";
}
}
[/codesyntax]
本文涉及的源码可以从这里check出来:svn://surenpi.com/project/hibernate/org.suren.hibernate
[codesyntax lang="xml"]
<groupId>org.suren.hibernate</groupId>
<artifactId>hibernate-encrypt</artifactId>
<version>0.0.1-SNAPSHOT</version>
[/codesyntax]
http://blog.csdn.net/pingnanlee/article/details/41866335
http://blog.csdn.net/ljhabc1982/article/details/6319251