Теперь, когда наша база данных настроена, пришло время установить соединение MongoDB с Spring Boot. Это соединяет базу данных с нашей серверной системой, подготавливая нас к началу реализации наших операций. Однако я не хочу, чтобы мои учетные данные базы данных были на GitHub. Поэтому в этом посте я буду защищать свои учетные данные базы данных.
У меня уже был свой проект весенней загрузки, но если вы этого не сделаете, перейдите на страницу У меня уже был свой проект весенней загрузки, но если вы этого не сделаете, перейдите на страницу
- Инструменты для разработки пружинных ботинок
- Весенняя паутина
- Spring Security (я хочу использовать токены JTW позже в проекте)
- Весенние данные MongoDB
Позвольте веб-сайту создать проект для вас, распакуйте его, и вы должны начать с пустого проекта Spring Boot.
Защита учетных данных базы данных
Первое, что я хочу сделать, это защитить свои учетные данные базы данных. Одно из мест, где их можно разместить, находится в файле application.properties. Однако этот файл загружается на GitHub, что означает, что учетные данные базы данных будут видны всем. И, давайте будем честны, я этого не хочу, и вы, вероятно, тоже этого не хотите. Итак, пришло время внедрить решение, которое решило бы эту проблему.
Создайте файл свойств
В Java действительно есть приятная функция, с помощью которой вы можете подключиться к свойствам системы. В этом случае я хочу использовать метод System.getProperty("пользователь.главная") . Этот метод позволяет мне перейти на домашний диск без его жесткого кодирования. В Windows user.home каталог обычно находится по адресу C:\Users \<ваше имя пользователя>\ . В Linux это домашний каталог. Используя этот метод, мы также можем сделать программное обеспечение кроссплатформенным. Я создал подкаталог, который будет содержать файлы для моего проекта.
Итак, в этом подкаталоге я создал свой файл свойств: rosa fiore.properties . В этом файле я установил имя пользователя и пароль, которые я использую для подключения к базе данных. Это выглядит примерно так:
username=password=
Обратите внимание, что я не использую какие-либо награды для строки, которую я использую для определения своего имени пользователя и пароля. Теперь пришло время вернуться к проекту в IntelliJ (или любой другой Java IDE, которую вы предпочитаете). Я создал следующую файловую структуру для своего проекта:
Чтение файла свойств при запуске
Первый класс, на который я собираюсь взглянуть, – это класс конфигурации. Я использую этот класс для загрузки свойств из моего файла свойств с помощью следующего фрагмента кода :
@Component
@ConfigurationProperties(prefix = "config")
@Validated
public class Config {
public static String USERNAME;
public static String PASSWORD;
private static final String PROPERTIES_LOCATION = System.getProperty("user.home") +
"/RosaFiore/rosafiore.properties";
public static void getConfig() {
Properties properties = new Properties();
try {
properties.load(new FileInputStream(PROPERTIES_LOCATION));
USERNAME = properties.getProperty("username");
PASSWORD = properties.getProperty("password");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
Теперь мы можем загрузить свойства из нашего файла свойств! Однако нам нужно, чтобы это было сделано при запуске приложения. Итак, нам нужно найти способ подключиться к процессу запуска Spring Boot и запустить этот класс конфигурации. Для этого нам нужно внести некоторые изменения в класс, в котором находится основной метод.
В классе с нашим основным методом я собираюсь добавить внутренний статический класс. Этот внутренний класс позволяет нам использовать getConfig() из нашего класса конфигурации. Мы можем достичь этого, создав класс, реализующий ApplicationListener. Чтобы быть более конкретным, прослушиватель, который запускает событие ApplicationEnvironmentPreparedEvent . Переопределив onApplicationEvent() , мы можем использовать Config.getConfig() для загрузки наших свойств. Затем мы должны настроить ваш основной метод для добавления ApplicationListener, чтобы он запускал наш Config.getConfig() в событии, подготовленном средой. Полностью законченный, он выглядит чем-то вроде это :
@SpringBootApplication
public class BlogBackendApplication {
static class EnvironmentPreperation implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
Config.getConfig();
if (Config.USERNAME.isEmpty() || Config.PASSWORD.isEmpty()) throw new IncompleteConfigException();
}
}
public static void main(String[] args) {
SpringApplication blogBackend = new SpringApplication();
blogBackend.addListeners(new BlogBackendApplication.EnvironmentPreperation());
blogBackend.setSources(new HashSet(Arrays.asList(BlogBackendApplication.class)));
ConfigurableApplicationContext context = blogBackend.run(args);
System.out.println("DbUsername: " + Config.USERNAME + " ; DbPassword: " + Config.PASSWORD);
}
}
Я добавил эту последнюю строку кода, чтобы убедиться, что свойства загружены правильно. При запуске кода я вижу этот красивый фрагмент журнала, появляющийся в моей консоли:
2020-07-17 20:07:05.519 INFO 14676 --- [ restartedMain] e.r.blogbackend.BlogBackendApplication : Started BlogBackendApplication in 2.4 seconds (JVM running for 2.981) DbUsername:; DbPassword:
Теперь, когда я защитил свои учетные данные базы данных, я могу начать работу над подключением моей базы данных MongoDB к моему проекту Spring Boot. Итак, в следующий раз я начну внедрять и добавлять свои первые тестовые записи в блоге в базу данных.
Оригинал: “https://dev.to/shadowphoenix/securing-database-credentials-building-a-blog-1630”