Рубрики
Без рубрики

Конфигурация пружинной загрузки с помощью Jasypt

Включите Jasypt для шифрования атрибутов файла конфигурации в приложении Spring Boot для расшифровки и использования во время выполнения.

Автор оригинала: baeldung.

1. введение

Jasypt (упрощенное шифрование Java) Spring Boot предоставляет утилиты для шифрования источников свойств в загрузочных приложениях.

В этой статье мы обсудим, как мы можем добавить поддержку jasypt-spring-boot и использовать ее.

Для получения дополнительной информации об использовании Jasypt в качестве основы для шифрования ознакомьтесь с нашим введением в Jasypt здесь .

2. Почему Jasypt?

Всякий раз, когда нам нужно хранить конфиденциальную информацию в файле конфигурации, это означает, что мы, по сути, делаем эту информацию уязвимой; это включает в себя любую конфиденциальную информацию, такую как учетные данные, но, безусловно, гораздо больше.

Используя Jasypt, мы можем обеспечить шифрование атрибутов файла свойств , и наше приложение выполнит работу по его расшифровке и извлечению исходного значения.

3. Способы использования JASYPT с пружинным загрузчиком

Давайте обсудим различные способы использования Jasypt с Spring Boot.

3.1. Использование jasypt-spring-boot-starter

Нам нужно добавить одну зависимость в наш проект:


    com.github.ulisesbocchio
    jasypt-spring-boot-starter
    2.0.0

Maven Central имеет последнюю версию jasypt-spring-boot-starter .

Давайте теперь зашифруем текст [email protected] с помощью секретного ключа “пароль” и добавим его в encrypted.properties:

encrypted.property=ENC(uTSqb9grs1+vUv3iN8lItC0kl65lMG+8)

И давайте определим класс конфигурации AppConfigForJasyptStarter – чтобы указать файл encrypted.properties в качестве PropertySource :

@Configuration
@PropertySource("encrypted.properties")
public class AppConfigForJasyptStarter {
}

Теперь мы напишем служебный компонент Property Service для Jasypt Starter для извлечения значений из encrypted.properties . Расшифрованное значение может быть получено с помощью аннотации @Value или метода |/getProperty() класса Environment :

@Service
public class PropertyServiceForJasyptStarter {

    @Value("${encrypted.property}")
    private String property;

    public String getProperty() {
        return property;
    }

    public String getPasswordUsingEnvironment(Environment environment) {
        return environment.getProperty("encrypted.property");
    }
}

Наконец, используя вышеуказанный класс обслуживания и установив секретный ключ, который мы использовали для шифрования, мы можем легко получить расшифрованный пароль и использовать его в нашем приложении :

@Test
public void whenDecryptedPasswordNeeded_GetFromService() {
    System.setProperty("jasypt.encryptor.password", "password");
    PropertyServiceForJasyptStarter service = appCtx
      .getBean(PropertyServiceForJasyptStarter.class);
 
    assertEquals("[email protected]", service.getProperty());
 
    Environment environment = appCtx.getBean(Environment.class);
 
    assertEquals(
      "[email protected]", 
      service.getPasswordUsingEnvironment(environment));
}

3.2. Использование jasypt-spring-boot

Для проектов, не использующих @SpringBootApplication или @EnableAutoConfiguration , мы можем использовать ясыпт -пружинный ботинок зависимость напрямую:


    com.github.ulisesbocchio
    jasypt-spring-boot
    2.0.0

Аналогично, давайте зашифруем текст [email protected] с помощью секретного ключа “пароль” и добавим его в encryptedv2.properties :

encryptedv2.property=ENC(dQWokHUXXFe+OqXRZYWu22BpXoRZ0Drt)

И давайте создадим новый класс конфигурации для зависимости jasypt-spring-boot.

Здесь нам нужно добавить аннотацию @EncryptablePropertySource :

@Configuration
@EncryptablePropertySource("encryptedv2.properties")
public class AppConfigForJasyptSimple {
}

Кроме того, определен новый сервис Property Для Jasypt Simple bean для возврата encrypted v2.properties :

@Service
public class PropertyServiceForJasyptSimple {
 
    @Value("${encryptedv2.property}")
    private String property;

    public String getProperty() {
        return property;
    }
}

Наконец, используя приведенный выше класс обслуживания и установив секретный ключ, который мы использовали для шифрования, мы можем легко получить свойство encryptedv2.:

@Test
public void whenDecryptedPasswordNeeded_GetFromService() {
    System.setProperty("jasypt.encryptor.password", "password");
    PropertyServiceForJasyptSimple service = appCtx
      .getBean(PropertyServiceForJasyptSimple.class);
 
    assertEquals("[email protected]", service.getProperty());
}

3.3. Использование пользовательского шифрования JASYPT

Шифраторы, определенные в разделах 3.1 и 3.2, построены со значениями конфигурации по умолчанию.

Тем не менее, давайте определим наше собственное шифрование Jasypt и попробуем использовать его для нашего приложения.

S0, пользовательский компонент шифрования будет выглядеть следующим образом:

@Bean(name = "encryptorBean")
public StringEncryptor stringEncryptor() {
    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    SimpleStringPBEConfig config = new SimpleStringPBEConfig();
    config.setPassword("password");
    config.setAlgorithm("PBEWithMD5AndDES");
    config.setKeyObtentionIterations("1000");
    config.setPoolSize("1");
    config.setProviderName("SunJCE");
    config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
    config.setStringOutputType("base64");
    encryptor.setConfig(config);
    return encryptor;
}

Кроме того, мы можем изменить все свойства для Простой строки PBEConfig.

Кроме того, нам нужно добавить свойство “jasypt.encryption.been” в наш application.properties, чтобы Spring Boot знал, какой пользовательский шифратор он должен использовать .

Например, мы добавляем пользовательский текст [email protected] зашифрованный секретным ключом “пароль” в application.properties:

jasypt.encryptor.bean=encryptorBean
encryptedv3.property=ENC(askygdq8PHapYFnlX6WsTwZZOxWInq+i)

Как только мы его установим, мы сможем легко получить свойство encrypted v3.property из среды Spring :

@Test
public void whenConfiguredExcryptorUsed_ReturnCustomEncryptor() {
    Environment environment = appCtx.getBean(Environment.class);
 
    assertEquals(
      "[email protected]", 
      environment.getProperty("encryptedv3.property"));
}

4. Заключение

Используя Jasypt, мы можем обеспечить дополнительную безопасность данных, обрабатываемых приложением .

Это позволяет нам больше сосредоточиться на ядре нашего приложения, а также может быть использовано для обеспечения пользовательского шифрования, если это необходимо.

Как всегда, полный код для этого примера доступен на Github .