最近工作上面源掃掃到密碼 Hard Code 程式,有人提供使用 Jasypt 作加密動作,不過,就算改成從 DB 撈出來也會抓到這個問題,所以用 Jasypt 能不能掃到?我也不是很清楚。
這邊我就簡單做個紀錄。
了解怎麼載入 properties(與標題無關)
這邊跟加密沒有關係,但先了解怎麼從 Spring 載入 properties
設定
方法一 (context:property-placeholder )
1 | <context:property-placeholder location="classpath:system.properties" /> |
<context:property-placeholder>
標簽提供了一種優雅的外在化參數配置的方式,不過該標簽在Spring配置文件中只能存在一份!!!
眾所周知,Spring容器是采用反射掃描的發現機制,通過標簽的命名空間實例化實例,當Spring探測到容器中有一個org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer的Bean就會停止對剩余PropertyPlaceholderConfigurer的掃描,即只能存在一個實例!
參考: Spring配置文件context:property-placeholder標簽使用漫談 - IT閱讀
方法二 (PropertyPlaceholderConfigurer) 本篇重點!!
1 | <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> |
這邊Jaspty 會用這個!! Jaspty 裡面的 EncryptablePropertyPlaceholderConfigurer 繼承這個物件,我們可以使用@value
去抓出資料。
更多方法
- 五种方式让你在java中读取properties文件内容不再是难题 - 阿豪聊干货 - 博客园 TODO: 備份
- spring- properties 讀取的五種方式 | IT人
- Java程式碼中獲取配置檔案(config.properties)中內容的兩種方法 - IT閱讀
- Spring註解@Value及屬性載入組態檔方式 - IT145.com
讀取值方法
@value
1 | "${item.specKey}") ( |
讀取方法
1 | <bean id="xxx" class="xxxxx"> |
properties1
2item.specKey=Test
item.saltvalueStr=Test
Jasypt 加密動作
jasypt1
2
3
4
5<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.3</version>
</dependency>
1 | <bean id="jasyptConf" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> |
1 | jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver |
如何產生 Jasypt 加密key?
官網抓的jar 檔,下已下指令可以得出
1 |
|
還有一個方法是用官方 shell script 去產生Releases · jasypt/jasypt · GitHub,這邊就不特別做紀錄,網路很多是用這個方法。