前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >还将密码明文写在配置文件?试试 Jasypt Spring Boot

还将密码明文写在配置文件?试试 Jasypt Spring Boot

作者头像
happyJared
发布2019-04-21 15:47:19
1.2K0
发布2019-04-21 15:47:19
举报
文章被收录于专栏:happyJaredhappyJared

你是否还是这样,简单粗暴的把数据库用户名、密码等敏感信息写在配置文件中?那你又是否曾经考虑过其中的安全性问题?

代码语言:javascript
复制
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false
    username: root
    password: 123456

如果有的话,那下面来看看,如何通过使用 Jasypt Spring Boot ,以更加优雅的方式来规避这种操作。

  • 相关依赖
代码语言:javascript
复制
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
  • 完善配置
代码语言:javascript
复制
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&tinyInt1isBit=false
    # 对应用户名 root ,密码 123456
    username: ENC[KHRM9dKY8KykzzYbt8rRZQ==]
    password: ENC[RWmQMxlcukotJAb36PrKSA==]

jasypt:
  encryptor:
    # 任意的随机字符串均可
    password: SBPstLlrFzXW01Okb62R95qvpj4J83Dn
    property:
      # 自定义属性规则,默认前缀是“ENC(”,后缀为“)”
      prefix: "ENC["
      suffix: "]"

留意到上面这段配置的用户名和密码是 ENC[xxx] 这种格式的,其中 ENC[] 是自定义配置的,这也是 Jasypt 能正常识别待解密数据的规则,那其中的加密串又是从哪来的呢?

当然是运算出来的。最简单的配置,开发者只需要再补充完 jasypt.encryptor.password=xxx 属性即可(同上,还支持使用 DER、PEM 这种证书的 private/public keys 加解密方式),具体的生成代码在下方:

代码语言:javascript
复制
@Slf4j
@SpringBootApplication
@EnableEncryptableProperties
public class JasyptSpringBootApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context =
                SpringApplication.run(JasyptSpringBootApplication.class, args);
        JasyptSpringBootApplication application = context.getBean(JasyptSpringBootApplication.class);
        // 这里可以将明文(用户名、密码)转换成相应密文
        application.jasypt("root");
        application.jasypt("123456");

        // 不过程序最后还是通过明文信息进行数据库连接
        HikariDataSource hikariDataSource = (HikariDataSource) context.getBean(DataSource.class);
        log.info("DB username: {} , password: {}", hikariDataSource.getUsername(), hikariDataSource.getUsername());
    }

    @Resource
    private StringEncryptor stringEncryptor;

    public void jasypt(String text) {
        // 即使是相同明文,但这里每次生成的都是不同的密文
        String encryptedText = stringEncryptor.encrypt(text.trim());
        String decryptedText = stringEncryptor.decrypt(encryptedText);
        log.info("ORIGINAL: {} ; ENCRYPTED: {} ; DECRYPTED: {}", text, encryptedText, decryptedText);
    }

}

相关链接

jasypt-spring-boot jasypt-spring-boot-samples

示例源码 欢迎关注我的个人公众号:超级码里奥 如果这对您有帮助,欢迎点赞和分享,转载请注明出处

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档