jasypt結合spring加密

來源:互聯網
上載者:User

1.maven2引用

jasypt座標

<dependency>      <groupId>org.jasypt</groupId>      <artifactId>jasypt</artifactId>      <version>{version}</version>      <scope>compile</scope></dependency>
 

jasypt with spring座標

<dependency>      <groupId>org.jasypt</groupId>      <artifactId>jasypt-spring31</artifactId>      <version>{version}</version>      <scope>compile</scope></dependency>

如要結合spring ,需要將jasypt-spring31加入依賴

 

簡單輕量的引用

    <dependency>      <groupId>org.jasypt</groupId>      <artifactId>jasypt</artifactId>      <version>{version}</version>      <classifier>lite</classifier>      <scope>compile</scope>    </dependency>

 

2.在spring中聲明一個Encryptor的引用

例如:

<bean id="strongEncryptor"    class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">    <property name="algorithm">        <value>PBEWithMD5AndTripleDES</value>    </property>    <property name="password">        <value>jasypt</value>    </property>  </bean>

 

algorithm=演算法

password=密鑰

 

3.使用spring的app應用設定檔加密

Jasypt 提供的可體會spring configuration管理類的classes: org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer, as a totally compatible replacement for Spring'sPropertyPlaceholderConfigurer. org.jasypt.spring3.properties.EncryptablePropertyOverrideConfigurer, as a totally compatible replacement for Spring'sPropertyOverrideConfigurer. org.jasypt.spring3.properties.EncryptableServletContextPropertyPlaceholderConfigurer: as a totally compatible replacement for Spring'sServletContextPropertyPlaceholderConfigurer. org.jasypt.spring3.properties.EncryptablePreferencesPlaceholderConfigurer: as a totally compatible replacement for Spring'sPreferencesPlaceholderConfigurer.

例子:

設定檔如下:

 datasource.driver=com.mysql.jdbc.Driver datasource.url=jdbc:mysql://localhost/reportsdb datasource.username=reportsUser datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)

 

其中datasource.password是加密了的字串,value的值必須要使用ENC()加密字串括起來

 

Spring context configuration:

  <!--                                                                      --> <!-- Configuration for encryptor, based on environment variables.         --> <!--                                                                      --> <!-- In this example, the encryption password will be read from an        --> <!-- environment variable called "APP_ENCRYPTION_PASSWORD" which, once    -->  <!-- the application has been started, could be safely unset.             --> <!--                                                                      --> <bean id="environmentVariablesConfiguration"     class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">   <property name="algorithm" value="PBEWithMD5AndDES" />   <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" /> </bean>密鑰passwordEnvName使用環境變數APP_ENCRYPTION_PASSWORD
     <!--                                                                      --> <!-- The will be the encryptor used for decrypting configuration values.  --> <!--                                                                      --> <bean id="configurationEncryptor"     class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">   <property name="config" ref="environmentVariablesConfiguration" /> </bean> <!--                                                                      --> <!-- The EncryptablePropertyPlaceholderConfigurer will read the           --> <!-- .properties files and make their values accessible as ${var}         --> <!--                                                                      --> <!-- Our "configurationEncryptor" bean (which implements                  -->  <!-- org.jasypt.encryption.StringEncryptor) is set as a constructor arg.  --> <!--                                                                      --> <bean id="propertyConfigurer"     class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">   <constructor-arg ref="configurationEncryptor" />   <property name="locations">     <list>       <value>/WEB-INF/classes/application.properties</value>     </list>   </property>    </bean>替換spring PropertyPlaceholderConfigurer的EncryptablePropertyPlaceholderConfigurer
 <!--                                                                      --> <!-- Our datasource is configured here, in the usual way. Jasypt's        --> <!-- EncryptedPropertyPlaceholderConfigurer will make sure that the       --> <!-- ${datasource.password} file gets decrypted and the DBCP DataSource   --> <!-- will be correctly initialised.                                       --> <!--                                                                      --> <bean id="dataSource"     class="org.apache.commons.dbcp.BasicDataSource"     destroy-method="close">   <property name="driverClassName">     <value>${datasource.driver}</value>   </property>   <property name="url">     <value>${datasource.url}</value>   </property>   <property name="username">     <value>${datasource.username}</value>   </property>   <property name="password">     <value>${datasource.password}</value>   </property> </bean>        設定檔中加密了的datasource.password會被解密出來。
 
還有幾個說明,懶得翻譯了,自己看吧(英文水平不行的請止步,後面的可看可不看)
 
Encryptable ServletContextPropertyPlaceholderConfigurer implementation for Spring 

Jasypt includes org.jasypt.spring3.properties.EncryptableServletContextPropertyPlaceholderConfigurer, a subclass of org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer which allows the transparent decryption of servlet context parameters in web applications (for example, parameters in WEB-INF/web.xml).

These encrypted parameters can be specified in a way equivalent to that of encrypted parameters in .properties files:

    ...    <context-param>        <param-name>someParameter</param-name>        <param-value>ENC(...)</param-value>    </context-param>    ...
 
Encryptable PreferencesPlaceholderConfigurer implementation for Spring 

Jasypt includes org.jasypt.spring3.properties.EncryptablePreferencesPlaceholderConfigurer, a subclass of org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer which allows the transparent decryption preferences set with JDK 1.4's Preferences API.    

The jasypt-spring3 library includes a namespace you can use in your Spring XML files in order to make the declaration of your jasypt entities much easier.

This namespace can be included in your XML like this:

<beans xmlns="http://www.springframework.org/schema/beans"       ...       xmlns:encryption="http://www.jasypt.org/schema/encryption"       ...       xsi:schemaLocation="http://www.springframework.org/schema/beans                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                           ...                           http://www.jasypt.org/schema/encryption                           http://www.jasypt.org/schema/encryption/jasypt-spring3-encryption-1.xsd                           ...">

Once declared, you will be able to use <encryption:*> tags for: Creating encryptors and digesters. Creating configuration beans, both for encryptors and for digesters. Creating instances of EncryptableProperties (extending java.util.Properties) that automatically decrypt entries in .properties files. Registering an EncryptablePropertyPlaceHolderConfigurer. Creating encryptors and digesters

Creating encryptor and digester artifacts with the encryption namespace is easy. There's a tag for each type of encryptor/digester (including some util classes), and each tags is able to specify all of the artifact's properties as tag attributes.

Let's see some encryptor declaration examples:

  <!-- Registers an org.jasypt.encryption.ByteEncryptor-->  <encryption:byte-encryptor id="myEncryptor" algorithm="PBEWithMD5AndTripleDES" password="jasypt"/>    <!-- Registers an org.jasypt.encryption.StringEncryptor-->  <encryption:string-encryptor id="myEncryptor" password="jasypt" pool-size="5"/>    <!-- Registers an org.jasypt.encryption.BigDecimalEncryptor-->  <encryption:big-decimal-encryptor password="jasypt" key-obtention-iterations="15000"/>    <!-- Registers an org.jasypt.encryption.BigIntegerEncryptor-->  <encryption:big-integer-encryptor id="myEncryptor" password="jasypt" provider-name="BC"/>

Note how the pool-size parameter will affect the specific implementation of encryptor being created: a PooledPBE*Encryptor if this parameter is specified, and a StandardPBE*Encryptor if not.

Now for some digesters:

  <!-- Registers an org.jasypt.digest.ByteDigester-->  <encryption:byte-digester algorithm="SHA-1" salt-size-bytes="16" iterations="50000"/>    <!-- Registers an org.jasypt.digest.StringDigester-->  <encryption:string-digester pool-size="10"/>

Again, the pool-size attribute will determine whether the digesters will be Standard or Pooled.

Some util artifacts can also be instantiated this way:

  <!-- Password encryptors -->  <encryption:basic-password-encryptor/>  <encryption:strong-password-encryptor/>  <encryption:configurable-password-encryptor/>    <!-- Text encryptors -->  <encryption:basic-text-encryptor password="jasypt"/>  <encryption:strong-text-encryptor password="jasypt"/>
Creating configuration beans for encryptors and digesters

Configuration beans implement the DigesterConfig interface for digesters and PBEConfig for encryptors, and Jasypt offers several implementations of these interfaces out-of-the-box depending on whether the digester to be created is meant for bytes or Strings, and also whether some configuration parameters can come from environment variables and/or system properties.

The encryption namespace will automatically choose the correct config bean implementation to be instantiated depending on the specified configuration attributes, so that you do not have to worry about the specific implementation class you need.

Let's see some examples:

  <encryption:digester-config id="dConf1" iterations="1400" salt-size-bytes="32"/>  <encryption:digester-config id="dConf2" iterations="10000" string-output-type="hexa"/>  <encryption:digester-config id="dConf3" string-output-type="hexa" algorithm-env-name="VAR_ALGORITHM"/>      <encryption:encryptor-config id="eConf1" key-obtention-iterations="500" password-env-name="VAR_PASSWD"/>   <encryption:encryptor-config id="eConf2" password-env-name="VAR_PASSWD" algorithm="PBEWithMD5AndTripleDES"/>   <encryption:encryptor-config id="eConf3" password="jasypt" algorithm-sys-property-name="jasypt.enc.algorithm"/> 

Using these beans in our encryptors/digesters is easy:

  <encryption:digester-config id="dConf" string-output-type="hexa" algorithm-env-name="VAR_ALGORITHM"/>  <encryption:string-digester config-bean="dConf"/>     <encryption:encryptor-config id="eConf" password-env-name="VAR_PASSWD" algorithm="PBEWithMD5AndTripleDES"/>  <encryption:string-encryptor id="stringEnc" config-bean="eConf"/> 
Creating EncryptableProperties instances

Usually, in Spring you can create a java.util.Properties bean in your XML using the util namespace, like this:

  <util:properties location="classpath:application.properties"/>

Jasypt allows you to register an org.jasypt.properties.EncryptableProperties object in an equivalent manner, simply by adding an encryptor bean reference:

  <encryption:encryptable-properties encryptor="stringEnc" location="classpath:application.properties"/>

This <encryption:encryptable-properties> tag works in exactly the same way and with exactly the same features as <util:properties>, and as the object it registers is a subclass of java.util.Properties, you can autowire it inside your application with your code not even noticing these properties are originally encrypted. Registering an EncryptablePropertyPlaceholder/Override

Spring allows you to easily register a PropertyPlaceholderConfigurer that takes care of the resolution of your ${...} property expressions:

  <context:property-placeholder location="classpath:application.properties"/>

But if you want to register an EncryptablePropertyPlaceholder instead because your property files might be encrypted, you can do:

  <encryption:encryptable-property-placeholder encryptor="stringEnc" location="classpath:application.properties"/>

And that's it! A property override implementation is also provided:

  <encryption:encryptable-property-override encryptor="stringEnc" location="classpath:application.properties"/>
 

For details on how to integrate jasypt with Spring Security 3.x, please have a look at this guide.

 

 

引用:http://www.jasypt.org/spring3.html。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.