В pom.xml
добавьте следующую запись.
В разделе свойств добавьте версию. 3.0.4
— последняя версия на 2 декабря 2022 г.
<properties>
<jasypt.version>3.0.4</jasypt.version>
</properties>
В разделе зависимости
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>${jasypt.version}</version>
</dependency>
И чтобы мы могли выполнять jasypt независимо, мы могли бы добавить ту же зависимость в разделе плагинов. Это позволит нам зашифровать пароль и показать нам через командную строку.
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>${jasypt.version}</version>
</plugin>
Конфигурация
ИСПОЛЬЗОВАНИЕ АННОТАЦИИ
В вашей основной точке входа Springboot добавьте аннотацию @EnableEncryptableProperties
. На самом деле этого достаточно, чтобы использовать jasypt.
@SpringBootApplication
@EnableEncryptableProperties
public class Application implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(ApplicationArguments arguments) {
}
}
ИСПОЛЬЗОВАНИЕ КЛАССА КОНФИГУРАЦИИ
Помимо использования аннотаций, мы также можем настроить программно, если это необходимо. Посмотреть образец
@Configuration
public class JasyptEncryptorConfig {
@Value("${jasypt.encryptor.password:mySaltValueHereChangeThis}")
private String salt;
@Value("${jasypt.encryptor.algorithm:PBEWithMD5AndDES}")
private String algorithmn;
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor getPasswordEncryptor() {
var encryptor = new PooledPBEStringEncryptor();
var config = new SimpleStringPBEConfig();
config.setPassword(salt);
config.setAlgorithm(algorithmn);
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
ИСПОЛЬЗОВАНИЕ СОЛЬ
Соль позволяет зашифрованному значению быть другим каждый раз, когда вы генерируете зашифрованное значение, не изменяя исходное значение mysupersecretpassword123!
. Если вы хотите, чтобы шифрование использовало соль, у вас есть несколько вариантов.
Использовать параметры виртуальной машины
-Djasypt.encryptor.password=mySaltValueHereChangeThis
Использовать файл конфигурации
образец YAML
jasypt:
encryptor:
password: mySaltValueHereChangeThis
Образец файла свойств
jasypt.encryptor.password=mySaltValueHereChangeThis
Переменная среды
Это переопределит значение файла конфигурации, если вы также введете туда запись.
JASYPT_ENCRYPTOR_PASSWORD=mySaltValueHereChangeThis
Шифрование
В нашем примере нам нужно было зашифровать пароль mysupersecretpassword123!
.
mvn jasypt:encrypt-value -Djasypt.plugin.value=mysupersecretpassword123!
или если вы хотите использовать salt
, команда
mvn jasypt:encrypt-value -Djasypt.encryptor.password=mySaltValueHereChangeThis -Djasypt.plugin.value=mysupersecretpassword123!
Вывод что-то вроде
ENC(nObqvmVPYhxVaykMl09QVtGCQWjpd7al1RJhOsyz1eLkb6J2USMu9Fb//e4a6Vro)
Вы можете скопировать это в свой файл конфигурации и все. Когда вы запускаете свое приложение, оно должно иметь возможность расшифровать это и обработать исходное значение.
Использование заполнителей
Это необходимо только в том случае, если вы не хотите копировать и вставлять вывод. Что вы хотели, так это заменить значение конфигурации из файла конфигурации.
В вашем файле конфигурации используйте DEC
.
Образец YAML-файла
password: DEC(mysupersecretpassword123!)
Образец файла свойств
password=DEC(mysupersecretpassword123!)
После того, как вы установили DEC
, выполните команду
mvn jasypt:encrypt
или при использовании соли
mvn jasypt:encrypt -Djasypt.encryptor.password=mySaltValueHereChangeThis
Команда заменила DEC
на ENC
и значение на зашифрованное.
Проверка зашифрованного значения
Если вы хотите увидеть незашифрованное значение, вы можете выполнить следующие команды.
mvn jasypt:decrypt
или при использовании соли
mvn jasypt:decrypt -Djasypt.encryptor.password=mySaltValueHereChangeThis