Шифрование application.properties в spring boot [duplicate]

Если вы используете только функцию mail(), вам нужно заполнить конфигурационный файл.

Вам нужно открыть расширение почты и установить SMTP smtp_port и т. д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.

33
задан Ali Dehghani 24 May 2016 в 07:22
поделиться

3 ответа

Вы можете использовать Jasypt для шифрования свойств, поэтому у вас может быть такое свойство:

db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=)

Jasypt позволяет вам шифровать ваши свойства с использованием разных алгоритмов, как только вы получите зашифрованное свойство, которое вы вставляете внутри ENC(...). Например, вы можете зашифровать этот путь через Jasypt с помощью терминала:

encrypted-pwd$ java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08



----ARGUMENTS-------------------

algorithm: PBEWithMD5AndDES
input: contactspassword
password: supersecretz



----OUTPUT----------------------

XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=

Чтобы легко настроить его с помощью Spring Boot, вы можете использовать стартер jasypt-spring-boot-starter с идентификатором группы com.github.ulisesbocchio

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

mvn -Djasypt.encryptor.password=supersecretz spring-boot:run

Вы можете проверить ссылку ниже для получения дополнительной информации:

https://www.ricston.com/blog / encrypting-properties-in-spring-boot-with-jasypt-spring-boot /

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

Использование @Value аннотации

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

Или с помощью Environment

@Autowired
private Environment environment;

public void doSomething(Environment env) {
    System.out.println(env.getProperty("db.password"));
}
32
ответ дан JustinKSU 20 August 2018 в 17:48
поделиться
  • 1
    Не могли бы вы объяснить более подробно, используя gradle @Frerica Piazza – Johir 10 January 2017 в 13:30
  • 2
    Непонятно об использовании с maven. вы передаете какое-то имущество и что дальше? Где файл свойств? как ise это значение в коде? – gstackoverflow 2 October 2017 в 16:03
  • 3
    @gstackoverflow, вопрос связан с шифрованием / расшифровкой, и он помечен весной загрузки, целью было объяснить, что шифрование не используется. Во всяком случае, я могу отредактировать этот ответ, чтобы дать вам более подробную информацию. Тем временем Spring использует это полностью прозрачное, просто вводит свойства с помощью @Values("db.password"). Для "где" это просто путь к классам. «Что дальше» ... ничего, весенняя загрузка делает все волшебство автоматически – Federico Piazza 2 October 2017 в 17:18
  • 4
  • 5
    – user2120188 10 October 2018 в 09:18

Spring Cloud Config Server позволит использовать этот тип поведения. Используя JCE, вы можете настроить ключ на сервере и использовать его для шифрования свойств приложений.

http://cloud.spring.io/spring-cloud-config/spring-cloud-config .html

8
ответ дан code 20 August 2018 в 17:48
поделиться

Если вы хотите скрыть свои пароли, самым простым решением будет использование переменных среды в файле application.properties или непосредственно в вашем коде.

В application.properties:

mypassword=${password}

Затем в вашем классе конфигурации:

@Autowired
private Environment environment;

[...]//Inside a method
System.out.println(environment.getProperty("mypassword"));

В вашем классе configuration:

@Value("${password}")
private String herokuPath;

[...]//Inside a method
System.out.println(herokuPath);

Примечание. Возможно, вам придется перезапустить после установки переменной окружения. Для окон:

Для получения дополнительной информации см. Эту документацию .

10
ответ дан Sanjay Rawat 20 August 2018 в 17:48
поделиться
  • 1
    Я не думаю, что установка главного пароля в среде vars - такая хорошая идея. Пароль теперь более разоблачен, чем необходимо. Предоставление ему запуска, как показано Федерико, менее подвержено воздействию и более «безопасно». чем устанавливать его в среде. – Jaavaaan 14 September 2016 в 06:11
  • 2
    Yaa, его нет, если вы используете общий компьютер. Но если вы являетесь единственным администратором вашего компьютера, тогда никакой другой пользователь не может видеть env vars. Я ответил на скрытую часть и на другую. Но да, я согласен, что предложенный Федерико метод лучше. – Sanjay Rawat 16 September 2016 в 05:30
Другие вопросы по тегам:

Похожие вопросы: