济南网站建设,触屏网站开发教程,苏州做网站品牌公司,如果启动浏览器就能直接打开一个常用的网站主页_要怎么做?自从我在这里发表上一个帖子以来已经有两个多月了#xff0c;但是今年六月和七月非常忙碌而密集。 首先#xff0c; Confitura的组织#xff08;欧洲最大的Java开发人员免费会议#xff09;参加了我所有的免费晚会#xff0c;然后在相当紧张的住院期间#xff0c;我们的第… 自从我在这里发表上一个帖子以来已经有两个多月了但是今年六月和七月非常忙碌而密集。 首先 Confitura的组织欧洲最大的Java开发人员免费会议参加了我所有的免费晚会然后在相当紧张的住院期间我们的第二个儿子出生了。 但是现在我将尝试再次定期写博客请继续关注。 在本文中我将简要介绍如何使用Jasypt库以一种简单透明的方式将加密的数据存储在数据库中并检索已解密的数据。 我们的用例将是存储Twitter Api凭据以便它们在我们的数据库中是安全的但仍易于检索并用于在我们的时间轴中发布更新。 因此我们有一个简单的实体来代表我们的设置项 Entity
public class SettingsItem implements Serializable {IdGeneratedValue(strategy javax.persistence.GenerationType.AUTO)private Integer id;private String name;private String encryptedValue;
} 在此表中我们将存储Twitter消费者密钥Twitter访问令牌等的值。 我们想要实现的是当我们创建具有值作为纯文本的SettingItem对象然后对其进行持久化时将自动执行加密因此在数据库中我们已对String进行了加密。 当然当我们从数据库中检索数据时我们希望开箱即用地看到解密的String而无需付出额外的努力。 Jasypt进行救援 Jasypt是一个用Java编写的简单加密库。 它使开发人员免于处理低级配置细节并使整个加密过程变得简单而直接。 而且现在最有趣的是它还与Hibernate很好地集成在一起可以对存储在数据库中的数据进行无缝加密/解密。 设定 要使用Jasypt及其Hibernate集成模块我们必须在pom中添加以下两项 dependencygroupIdorg.jasypt/groupIdartifactIdjasypt/artifactIdversion1.9.0/version/dependencydependencygroupIdorg.jasypt/groupIdartifactIdjasypt-hibernate4/artifactIdversion1.9.0/version/dependency自订类型 然后我们必须在实体中声明自定义的Hibernate类型TypeDef TypeDef(nameencryptedString,typeClassEncryptedStringType.class,parameters {// value will be used later to register encryptorParameter(nameencryptorRegisteredName, valueSTRING_ENCRYPTOR)}
)
Entity
public class SettingsItem implements Serializable {// (...)
} 然后在同一个类中我们可以标记我们的ActivatedValue字段以使用此自定义类型 Type(typeencryptedString)private String encryptedValue;注册加密器 我们快完成了。 我们要做的最后一件事是在HibernatePBEEncryptorRegistry类中注册加密器。 这可以在我们的应用程序的初始化类例如ServletContext中完成也可以仅在具有mainString [] args方法的类中完成 String password System.getProperty(jasypt.password);StandardPBEStringEncryptor strongEncryptor new StandardPBEStringEncryptor();strongEncryptor.setPassword(password);HibernatePBEEncryptorRegistry registry HibernatePBEEncryptorRegistry.getInstance();registry.registerPBEStringEncryptor(STRING_ENCRYPTOR, strongEncryptor); 这里重要的一点是通过使用System.getProperty或System.getenv我们可以安全地配置我们的加密机制通过在服务器计算机上设置适当的值在运行时提供密码。 摘要 作为总结一个简短的通过测试表明我们的解决方案有效 public class SettingsItemRepositoryShould extends IntegrationTest {Autowiredprivate SettingsItemRepository repository;BeforeClasspublic static void init() {StandardPBEStringEncryptor strongEncryptor new StandardPBEStringEncryptor();strongEncryptor.setPassword(JohnDoe);HibernatePBEEncryptorRegistry registry HibernatePBEEncryptorRegistry.getInstance();registry.registerPBEStringEncryptor(STRING_ENCRYPTOR, strongEncryptor);}Testpublic void shouldEncryptAndDecryptValue() {// GivenString settingName test;String value EncryptMe;// Whenrepository.save(new SettingsItem(settingName, value));// ThenSettingsItem settingsItem repository.findByName(settingName);assertThat(settingsItem.getEncryptedValue()).isEqualTo(value);}
} 参考通过Code Hard Go Pro博客从我们的JCG合作伙伴 Tomasz Dziurko 透明地持久存储数据库中的数据并检索加密数据 。 翻译自: https://www.javacodegeeks.com/2013/08/transparently-persist-and-retrieve-encrypted-data-from-database.html