在Spring配置文件中常使用佔位符(placeholder )來加載資源文件,經常一些資源文件都是已明文形式存放的,好比jdbc配置信息等,從系統安全角度來講,這些信息已明文形式顯示老是很差。今天接觸Jasypt,查了一些資料學習了下。Jasypt 是sourceforge.net上的一個開源項目,是一個Java庫。更多介紹自行google吧。算法
第一步,加入Jasypt依賴。這裏咱們使用maven。spring
<dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> <version>1.8</version> </dependency>
加密:安全
@Test public void encrypt() { // 建立加密器 StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); // 配置 EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES");// 加密算法 config.setPassword("fuyung");// 系統屬性值 encryptor.setConfig(config); String plaintext = "root"; //明文 String ciphertext = encryptor.encrypt(plaintext); // 加密 System.out.println(plaintext + " : " + ciphertext);// 運行結果:root : 8y9G4kIZQuCHB78mMJNkHw== }
解密:maven
@Test public void decrypt() { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("fuyung"); encryptor.setConfig(config); String ciphertext = "8y9G4kIZQuCHB78mMJNkHw==";// 密文 //解密 String plaintext = encryptor.decrypt(ciphertext); // 解密 System.out.println(ciphertext + " : " + plaintext);// 運行結果:8y9G4kIZQuCHB78mMJNkHw== : root }
與Spring集成。在Spring的配置文件裏面加入以下代碼:學習
<bean id="propertyConfigure" class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer"> <constructor-arg ref="configurationEncryptor"/> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> <property name="ignoreResourceNotFound" value="true"/> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config" ref="environmentVariablesConfiguration"/> </bean> <bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWithMD5AndDES"/> <property name="password" value="clm"/> </bean>
在看一下jdbc.properties文件:google
jdbc.username=ENC(kpKWmxAX2LMUqqkKPCulpTimxznTDxXw)
jdbc.password=ENC(Wg/U1YMQOznH4WyP7HpTTJL0v1KGFLIC)
記得在你的密文前加上ENC前綴,並用()包起來。爲何要這樣寫,查看源碼便知:加密
這樣子在啓動Spring容器的時候就會讀取到加密的值就會自動進行解密了。spa