博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jasypt与Spring结合使用说明
阅读量:5863 次
发布时间:2019-06-19

本文共 4065 字,大约阅读时间需要 13 分钟。

     jasypt既然是以简单的方式来解决java开发中的加密问题,自然使用起来难度不是很大。加密是从系统安全性方面考虑的,因此jasypt更像是面向方面的解决办法,不管你的系统中配置文件,敏感信息是否已经加密或者没有加密,jasypt都能够轻松的嵌入其中,开发人员就不用专门考虑加密算法和代码的编写。

  要想深入了解jasypt是如何将加密解密和摘要算法组织起来,轻松的解决开发中加密问题以及和第三方组件集成,查看它的源代码是不错的选择。

  下面主要说说如何在Spring框架中如何轻松使用jasypt。(下面的加密机是对jasypt中的加密解密,摘要算法的统称)

  第一种方式:以bean的形式将加密机(即:加密类的实例对象)交给Spring托管

  第二种方式:以配置XML的形式将加密机与Spring集成。

 

  第一种方式:

  1.托管一个StandardPBEStringEncryptor加密机

 

    
        
            
PBEWithMD5AndTripleDES
                
            
${user.home}
            

 这里的属性"password"的值为系统属性的值,实际开发中在对某一个数据进行加密的时候这个password是要进行记录的,如果password在这里设置之后将默认提供了一个password的取值。

其它的属性设置可以参见: 这篇文章中关于jasypt命令行工具的介绍。

 

在程序中使用strongEncrypt加密机对象:

  

@Test    public void test1() {        StandardPBEStringEncryptor spe = (StandardPBEStringEncryptor) context                .getBean("strongEncryptor");        String src = "admin@123";        String encrypt = spe.encrypt(src);        System.out.println("src:" + src);        System.out.println("encrypt:" + encrypt);        String decrypt = spe.decrypt(encrypt);        System.out.println("decrypt:" + decrypt);        //加密解密        Assert.assertEquals(decrypt, src);    }

 2.托管一个StandardStringDigester加密机

 

    
        
            
MD5
            

在程序中使用digestEncryptor加密机对象

 

@Test    public void test7() {        StandardStringDigester ssd = (StandardStringDigester) context                .getBean("digestEncryptor");        String rs1 = ssd.digest("admin");        String rs2 = ssd.digest("admin");        System.out.println(rs1 + "  [vs]  " + rs2);        //判断是否匹配        Assert.assertTrue(ssd.matches("admin", rs1));    }

StrandardStringDigester类提供了matches方法用来检测原始数据和进行摘要计算后的数据是否匹配。

   1,2介绍了数据的处理,下面3讲介绍使用jasypt对配置文件进行处理.

3.使用jasypt对配置文件进行处理

  比如数据库连接的属性值一般要进行加密处理,然后在程序运行时对其进行解密连接数据库,这样就保证了在程序代码已经配置中数据库的连接相关敏感数据不至于明文暴露。

 jasypt是如何处理这一过程的呢?

 首先,配置环境变量(这里指用来加解密的环境),

 然后,通过环境变量来装载加密机,

最后,使用jasypt对Spring的org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类的子类来配置属性文件替换配置。

 下面是具体的配置信息:

 

    
        
        
        
        
        
    
        
        
    
        
        
            
                
classpath:db.properties
            
                
    
        
            
${dataSource.driver}
                
            
${dataSource.url}
                
            
${dataSource.username}
                
            
${dataSource.password}
            

  说明:

  •   EnvironmentStringPBEConfig 中的属性

  passwordEnvName,  passwordSysPropertyName,password

  三者的区别是:

  passwordEnvName的值直接设置为环境变量,比如value="APP_PASSWORD", APP_PASSWORD则是系统环境变量,在实际生产环境中建议使用这个属性,具体使用步骤如:配置环境变量APP_PASSWORD  --> 启动应用程序 --> 应用程序启动完成  --> 删除环境变量APP_PASSWORD。

  passwordSysPropertyName的值就是用 System.getProperties() 获取的属性值,比如:value="${user.home}"

  password和使用jasypt命令行工具时的password参数用法一致。

  • 属性配置文件加密

dataSource.driver=org.postgresql.DriverdataSource.url=jdbc:postgresql://localhost:5432/dbnamedataSource.username=postgres#dataSource.password=postgresdataSource.password=ENC(lzRg3F8s4sfJPQ96m5YqDz50VeY85YGX)

 这里将password的加密结果放置在ENC(机密结果)中,注意这样的写法是jasypt的规定,可以查看源代码,在解密过程中会根据这个标志对属性配置文件中的加密数据进行解密。

 属性配置文件中的机密结果产生则需要用jasypt的命令行工具(具体使用可以参见:  ),这里要注意的是加密过程中的算法,password参数值需要和Spring配置文件中的environmentVariablesConfiguration(bean)的属性取值保持一致。

 

  •   数据源中使用属性配置信息中的值

    以前Spring中怎么使用,现在就怎么使用。

  •   jasypt和Spring集成的依赖

        jasypt.jar+jasypt-springx-x.jar , x表示一些版本信息。

 

第二种方式

第一种方式将jasypt中的类作为bean的形式在Spring中应用,第二种方式则更加强大,有独立的XML配置命名空间,更像是Spring的一部分。

首先需要在Spring的配置文件中添加jasypt的命名空间。

wKiom1OKwDrz36SBAAR9ufvTsr8947.jpg

 

配置完成jasypt的命名空间就可以在Spring的配置文件中直接进行加密机,加密机参数配置,下面是一个示例:

    
        
    
    
    
        
    
    
    
        
    

 第二种方式同样可以实现方式一中的功能。

      通过介绍了jasypt和Spring集成的两种方式可以看出使用jasypt能够比较轻松自定义加密的参数,配置文件的加解密,整个过程对于应用程序的代码侵入性是很小的,可以在程序中使用jasypt提供的加密算法和方法来实现对需要加密的数据进行处理。

 

    此外jasypt与Hibernate集成则以一个完全对程序逻辑透明的方式可以在ORM映射中对数据进行加解密。

    最后jasypt也是开放的,它开放了JCE Provider API,允许开发者使用任何存在的JCE Provider在jasypt中进行消息摘要和加密处理。

  

转载地址:http://nvunx.baihongyu.com/

你可能感兴趣的文章
js词法结构
查看>>
实验五
查看>>
非节点主机通过内网远程管理docker swarm集群
查看>>
js判断PC端还是移动端
查看>>
远程协助
查看>>
欧拉函数
查看>>
Unable to locate package错误解决办法
查看>>
2013.5.29
查看>>
Fiddler实现手机抓包——小白入门(转载csdn)
查看>>
Scrum实施日记 - 一切从零开始
查看>>
Windows中安装Emacs
查看>>
vim tab四个空格修改
查看>>
C#面向对象编程 封装 继承 多态
查看>>
一gradle创建SSM项目——依赖包
查看>>
(转载)在WinForm中使用GMap.Net地图插件
查看>>
安装xampp出错,windows找不到-n ?
查看>>
初涉c++学习笔记
查看>>
python基础之 Python os._exit() sys.exit() exit()区别
查看>>
Tomcat 改BUG之 localhost:8080 404
查看>>
UI透明欺诈
查看>>