Как я могу хранить конфиденциальные данные в файлах конфигурации Java? - PullRequest
3 голосов
/ 17 ноября 2010

У меня есть код, который я хочу опубликовать.Код отправляет электронную почту через серверы, подключается к базам данных и выполняет другие задачи, требующие имена пользователей и пароли.

Я бы хотел сохранить пароли и тому подобное в отдельном файле конфигурации, чтобы мне не приходилось очищать мой код при каждом коммите.

Как я могу это сделать?Это было бы легко сделать в C, используя #define, но я не уверен, как это сделать в Java.

РЕДАКТИРОВАТЬ: среда, которую я использую, Glassfish

Ответы [ 2 ]

8 голосов
/ 17 ноября 2010

Основной метод помещает информацию в файл свойств и использует класс Properties, чтобы загрузить ее во время выполнения.Если вы используете сервер J2EE, соединения с базой данных настраиваются на сервере, и код ссылается на них абстрактным именем.

Думаю, я должен добавить, что если вы используете сервер, то как его настроить и как получить соединения с вашим кодом, будет зависеть от уровня сервера и уровня J2EE, поэтому публикуйте свою среду.Использование класса Properties довольно очевидно, просто взглянув на javadoc и методы load ().

1 голос
/ 17 ноября 2010

В glassfish перейдите в консоль администратора и в разделе Ресурсы создайте новый пул соединений. Это определяет ваше соединение с базой данных и будет делить пул этих соединений между вашими приложениями. Теперь в JDBC Resources создайте новую запись, которая отображает этот пул на имя. Имя обычно что-то вроде jdbc / myappname.

Для приложения J2EE5 или новее вы можете добавить его в качестве переменной уровня класса:

@ Resource (mappedName = "jdbc / myappname") Источник данных myDS;

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

Соединение conn = myDS.getConnection ();

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

...