springboot jasypt加密_java打包加密

springboot jasypt加密_java打包加密1.maven2引用jasypt坐标org.jasyptjasypt{version}compile jasyptwithspring坐标org.jasyptjasypt-spring31{version}compile如要结合spri

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189387.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHOTOSHOP MAC快捷键

    PHOTOSHOP MAC快捷键工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具【M】裁剪工具【C】移动工具【V】套索、多边形套索、磁性套索【L】魔棒工具【W】喷枪工具【J】画笔工具【B】像皮图章、图案图章【S】历史记录画笔工具【Y】像皮擦工具【E】铅笔、直线工具【N】模糊、锐化、涂抹工具【R】减淡、加深、海棉工

    2022年6月24日
    48
  • python字符串删除指定符号(不限位置)「建议收藏」

    python字符串删除指定符号(不限位置)「建议收藏」python中去掉字符串中某些不想要的字符:1、一般的可以用replace()这个函数不限定位置,是可以替换原来不想要的字符,替换成空字符就相当于删除了2、也可以用strip(),删除两边的字符(默认是删除左右空格)rstrip(),lstrip()这两个可以选择只删除左边或者右边3、re.sub这个可以根据正则删除,此处是删除串中的数字1-9,字符a-z,A-Z,还可以加其他的importrestr=”aksj2343ngr4545g黄金叶子fg”temp=re.sub(‘[a

    2022年6月4日
    75
  • 大数据常见错误及解决方案[通俗易懂]

    大数据常见错误及解决方案[通俗易懂]大数据常见错误及解决方案(转载)1、用./bin/spark-shell启动spark时遇到异常:java.net.BindException:Can’tassignrequestedaddress:Service‘sparkDriver’failedafter16retries!解决方法:addexportSPARK_LOCAL_IP=“127.0.0.1”tospark-env.sh2、javaKafkaproducererror:ERRORkafka.util

    2022年6月2日
    160
  • 搭建本地私有pip源「建议收藏」

    搭建本地私有pip源「建议收藏」目的1、用于内网内的pip安装2、整理个人使用的python第三方库3、个人开发公用库搭建环境1、centos72、python2/python3搭建步骤(python2相同)1、安装python3.7下载地址:https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz解压tar-xvJfPython-3.7.2.tar.xz创建编译安装目录mkdir/usr/local/python3

    2022年5月18日
    131
  • 使用python进行方差分析_python多因素方差分析

    使用python进行方差分析_python多因素方差分析利用python实现方差分析简介 方差分析是一种常用的对数据进行分析的方法,用于两个及两个以上样本均数和方差差别的显著性检验。本文介绍单因素方差分析和双因素方差分析。 方差分析存在三个假设: 1、各样本总体服从正态分布。 2、各样本总体方差一样。 3、各样本总体相互独立。单因素方差分析 单因素方差分析就是在只有一种影响因素下判断各个样本间的均值差别的显著性。 数据会…

    2022年10月15日
    3
  • 调用第三方接口大致流程

    调用第三方接口大致流程下面以风控为例,业务是调用第三方接口获取支付宝报告天机支付宝获取流程:1本质:中转站:前台把参数传给我,我接受参数后传给天机,天机在传给支付宝,最后获取数据,在这个过程中   我们和天机都充当的是中转站的角色。2流程:a前台传客户的基本信息参数    b后台接受参数,传给天机,天机返回淘宝的认证地址链接,后台把链接返回给前台;    c前台打开链接,进入认证页面,进行认…

    2022年6月1日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号