SpringBoot配置文件加密

一、SpringBoot配置文件加密自定义

SpringBoot中的application.properties或application.yml文件中可能包含敏感信息(如数据库用户名和密码),为了保证安全,需要对其进行加密处理。SpringBoot提供了多种方式来实现配置文件加密,一种是自定义加密方式。

通过在application.properties或application.yml文件中配置自定义的加密方式:

encrypt:
  key: 1234567890ABCDEF
  salt: 0123456789ABCDEF

其中key是用于加密的密钥,salt是用于混淆的盐值。然后在使用到敏感信息的地方,将明文改为加密后的密文,例如:

spring.datasource.username=ENC(OcQy7UcFsmf7lLTc0Af2Yg==)
spring.datasource.password=ENC(nnr63c4zebYZEXqj9i+tCw==)

这里的ENC表示使用自定义加密方式加密,使用时还需要在代码中实现自定义的加解密工具类。

二、SpringBoot配置文件密码加密

SpringBoot还提供了一种简单的加密方式,可以对整个配置文件进行加密。加密方式如下:

// 加密
java -cp spring-boot.jar org.springframework.boot.loader.tools.EncryptionUtils mypassword
// 解密
java -cp spring-boot.jar org.springframework.boot.loader.tools.EncryptionUtils --decrypt ENC(fd2f7d0ece6ec4be86a29c2ac60eced6)

在application.properties或application.yml文件中配置加密后的密码,例如:

spring.datasource.password=ENC{fd2f7d0ece6ec4be86a29c2ac60eced6}

三、SpringBoot配置文件加密解密

可以使用Jasypt库对SpringBoot配置文件进行加密解密操作,并且可以在代码中自定义加解密方式。具体操作步骤如下:

1、在pom.xml文件中添加依赖:

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

2、在application.properties或application.yml文件中配置加密方式:

jasypt:
  encryptor:
    password: mypassword
  decryptor:
    password: mypassword

3、在代码中使用Jasypt加解密工具类对配置文件中的敏感信息进行加解密,例如:

@Autowired
private Environment environment;

String password = environment.getProperty("spring.datasource.password");
String decryptPassword = decryptor.decrypt(password);

四、SpringBoot接口加密

SpringBoot除了对配置文件进行加密,还可以对接口返回结果进行加密,防止信息泄露。可以结合使用Jasypt和AOP实现接口加密操作:

1、在pom.xml文件中添加依赖:

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

2、自定义注解@EncryptResult和AOP拦截器对接口返回结果进行加密操作:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EncryptResult {
}

@Aspect
@Component
public class ResultEncryptAspect {
    private final Logger logger = LoggerFactory.getLogger(ResultEncryptAspect.class);

    @Autowired
    private StringEncryptor encryptor;

    @Around("@annotation(com.example.demo.annotation.EncryptResult)")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        // 调用原始方法
        Object result = pjp.proceed();
        // 加密结果
        String json = JSON.toJSONString(result);
        StringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("password");
        String encryptedJson = encryptor.encrypt(json);
        // 返回加密结果
        logger.info("result before encryption: {}, result after encryption: {}", json, encryptedJson);
        return encryptedJson;
    }
}

3、在需要加密的接口方法上添加@EncryptResult注解即可实现返回结果加密。

五、SpringBoot读取配置文件

SpringBoot默认会从application.properties或application.yml文件中读取配置信息,可以通过@ConfigurationProperties注解将配置信息注入到Java Bean对象中,例如:

1、在application.yml文件中定义配置信息:

myapp:
  username: test
  password: 123456

2、定义对应的Java Bean:

@Component
@ConfigurationProperties(prefix="myapp")
public class MyBean {
    private String username;
    private String password;

    // Getters and setters
}

3、在代码中注入该Java Bean:

@Autowired
private MyBean myBean;

六、配置文件密码加密

除了使用Jasypt等第三方库进行配置文件加密外,还可以自己实现加密解密工具类对配置文件密码进行加密解密。具体实现方式如下:

1、定义自定义加密解密工具类:

public class PasswordUtils {
    public static String encrypt(String str, String key) {
        // 对str进行加密操作
        return encryptedStr;
    }

    public static String decrypt(String encryptedStr, String key) {
        // 对encryptedStr进行解密操作
        return str;
    }
}

2、在application.properties或application.yml文件中配置加密的密码:

spring.datasource.password = ENC{xxx}

3、在代码中读取加密的密码,并使用自定义工具类进行解密:

@Value("${spring.datasource.password}")
private String password;

String decryptedPassword = PasswordUtils.decrypt(password, "key");

七、Redis配置文件密码加密

Redis在使用时,也会涉及到密码等敏感信息的配置。可以使用Jasypt等第三方库对Redis配置文件中的密码进行加密操作:

1、在redis.conf文件中配置加密后的密码:

requirepass ENC{kOx0d7tkx/MWf+7Q9v54/g==}

2、在代码中读取加密的密码,并使用Jasypt工具类进行解密:

@Autowired
private Environment environment;

String password = environment.getProperty("redis.password");
String decryptedPassword = decryptor.decrypt(password);

八、SpringBoot配置文件的加载顺序

SpringBoot在启动时会自动加载多个配置文件,其加载顺序如下:

1、命令行参数中的配置项;

2、jar包同级目录下的config文件夹中的配置文件(优先级低于第1项);

3、jar包内部的配置文件(优先级低于第2项);

4、SpringBoot默认的配置文件(application.properties和application.yml,优先级低于第3项)。

如果存在多个相同的配置项,优先级高的配置项会覆盖掉优先级低的配置项。

原创文章,作者:UTRU,如若转载,请注明出处:https://www.506064.com/n/136091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UTRUUTRU
上一篇 2024-10-04 00:15
下一篇 2024-10-04 00:15

相关推荐

  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • SpringBoot如何设置不输出Info日志

    本篇文章将带您了解如何在SpringBoot项目中关闭Info级别日志输出。 一、为什么要关闭Info日志 在开发中,我们经常会使用Log4j、Logback等框架来输出日志信息,…

    编程 2025-04-27
  • 解决springboot中scanBasePackages无法读取子包的问题

    在使用springboot搭建项目时,可能会遇到scanBasePackages无法读取子包的问题。本文将从几个方面详细阐述如何解决这个问题。 一、问题描述 在使用Springbo…

    编程 2025-04-25
  • SpringBoot请求参数绑定

    解答:SpringBoot请求参数绑定是指将HTTP请求中的参数与Controller方法的参数绑定起来,使得参数的传递变得简单和方便。下面我们将从多个方面对SpringBoot请…

    编程 2025-04-25
  • SpringBoot文件上传详解

    一、前言 随着互联网的发展,文件上传成为了必备的功能之一,而SpringBoot作为目前最流行的开发框架之一,为文件上传提供了便捷而强大的解决方案。 二、使用multipart/f…

    编程 2025-04-24
  • 使用SpringBoot开发高效的Web服务应用

    一、快速入门 SpringBoot可以让你更快速地搭建Web应用,它为开发者提供了许多使用时省去了很多配置代码的便利。在这里,我们将通过一个简单的示例来介绍如何使用SpringBo…

    编程 2025-04-24
  • 使用SpringBoot连接MySQL数据库

    SpringBoot是一个用于构建基于Spring框架的应用程序的快速开发工具,它提供了许多函数和库,使开发人员能够快速构建应用程序并将其部署到云中。同时,MySQL是一个流行的关…

    编程 2025-04-24
  • Nacos SpringBoot版本详解

    一、Nacos简介 Nacos是一个开源的分布式配置管理和服务发现平台,为微服务架构提供了基础设施支持。它可以帮助开发人员解决微服务架构中的服务发现、服务配置、服务元数据管理和流量…

    编程 2025-04-23
  • SpringBoot的好处

    一、简化开发流程 用SpringBoot开发项目可以大大减少繁琐的配置工作,大部分的配置都是默认配置,只需要添加相应的依赖,即可完成开发工作。SpringBoot可以让你更专注于业…

    编程 2025-04-23

发表回复

登录后才能评论