我必须看到它的底部。这是一个简短的摘要:我有一个Configuration
模型对象,它具有一些配置设置以及用户名和密码。当然,密码是加密的,我必须解密才能使用它。务实地,我Configuration
用 Hibernate 加载对象(密码是加密的),我得到密码,我解密它,并将密码属性设置为新评估的明文(我使用 setter 方法)。请注意,我再也不会存储该Configuration
对象。奇怪的结果是我发现CONFIGURATIONS
在数据库中使用密码明文更新了表!我猜 Hibernate 缓存系统在其中扮演了一个神秘的角色,但我必须明白为什么以及如何。
详情如下:
我使用的是 Spring 框架,版本 3.1.2 RELEASE
servlet.xml
<!-- HIBERNATE -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.0.0.Final</version>
</dependency>
服务
@Service("configurationManager")
public class ConfigurationManager {
//attributes and blah blah
public Configuration loadConfiguration()
{
//the Configuration's password attribute is encrypted in the db
Configuration configuration = configurationDao.load();
if(configuration!=null)
{
//...to use the password I must decrypt it
if(!(configuration.getPassword()==null || configuration.getPassword().isEmpty()))
{
String encryptedText = configuration.getPassword();
String decryptedText = credentialsManager.decrypt(encryptedText);
//after decrypting the password, I set the Configuration's password attribute to the plaintext password
//I'll never ever store the Configuration obj with the newly set password.
configuration.setPassword(decryptedText);
}
}
return configuration;
}
}
(也许没用)线索:自从我开始将 AOP 用于不同目的时,我注意到了这种 Hibernate 行为。我看不出这两件事之间有明确的联系,但我还是报告了。我在项目中包含了这些库:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>