Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Хранение настроек java-приложения


Автор: koreyko 28.10.2011, 01:07
Здравствуйте!

Есть десктопное приложение под Windows, необходимо где-то хранить настройки для подключения к серверу (логин, пароль, урл  и т.д.), вернее несколько комплектов настроек. Заводить для этого внешний ini\xml-файл - неудобно. 

Нашел класс Preferences, который позволяет записывать данные в реестр. Разобрался, вроде все работает, однако в результате выяснилось, что там не рекомендуется использовать заглавные буквы, ибо при записи в реестр происходит их кодирование каким-то странным образом. А это для меня критичное ограничение.

Пришла в голову мысль, а не использовать ли мне для решения задачи какой-нибудь xml-файл, который можно включить в jar и обращаться к нему как к ресурсу? С первого взгляда должно работать, хотя наверняка есть какие-то подводные камни smile 

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

Спасибо.

  

Автор: Stolzen 28.10.2011, 06:52
Имхо лучше использовать properties - и класть его в classpath как ресурс. 

Автор: LSD 28.10.2011, 10:23
Цитата(koreyko @  28.10.2011,  02:07 Найти цитируемый пост)
там не рекомендуется использовать заглавные буквы, ибо при записи в реестр происходит их кодирование каким-то странным образом. А это для меня критичное ограничение.

Почему? Вы собираетесь заставлять пользователя руками лазить в реестр и править настройки?



Цитата(koreyko @  28.10.2011,  02:07 Найти цитируемый пост)
Пришла в голову мысль, а не использовать ли мне для решения задачи какой-нибудь xml-файл, который можно включить в jar и обращаться к нему как к ресурсу? С первого взгляда должно работать, хотя наверняка есть какие-то подводные камни

Руками такие настройки не подправить. Да и программно тоже будет это сделать крайне проблематично.

Автор: koreyko 28.10.2011, 13:31
Цитата(LSD @ 28.10.2011,  10:23)
Цитата(koreyko @  28.10.2011,  02:07 Найти цитируемый пост)
там не рекомендуется использовать заглавные буквы, ибо при записи в реестр происходит их кодирование каким-то странным образом. А это для меня критичное ограничение.

Почему? Вы собираетесь заставлять пользователя руками лазить в реестр и править настройки?

Спасибо, разобрался. 

Увидев, что записанный с помощью Preferences пароль PASSWORD хранится в реестре в виде /P/A/S/S/W/O/R/D я подумал, что Preferences.get(..) вернет /P/A/S/S/W/O/R/D. Сейчас проверил - возвращается корректное значение.

Автор: math64 28.10.2011, 20:05
Цитата(koreyko @  28.10.2011,  13:31 Найти цитируемый пост)
Увидев, что записанный с помощью Preferences пароль PASSWORD хранится в реестре в виде /P/A/S/S/W/O/R/D

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

Автор: koreyko 29.10.2011, 13:04
Цитата(math64 @ 28.10.2011,  20:05)
Цитата(koreyko @  28.10.2011,  13:31 Найти цитируемый пост)
Увидев, что записанный с помощью Preferences пароль PASSWORD хранится в реестре в виде /P/A/S/S/W/O/R/D

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

Спасибо, я об этом уже думал. Подскажите, пожалуйста, какими конкретно решениями (классами) вы рекомендуете воспользоваться. 

Автор: math64 29.10.2011, 20:35
Описанная мною методика используется в Linux для хранения паролей - можно посмотреть исходники утилиты смена пароля и портировать в Java. Может быть кто-то уже это сделал, я шифрованием в Java не занимался.

Автор: math64 29.10.2011, 21:28
http://ru.wikipedia.org/wiki/MD5 MD5 реализован в Java, так что воспользоваться просто.

Автор: koreyko 31.10.2011, 00:54
Да, спасибо, я нашел: http://download.oracle.com/javase/6/docs/api/java/security/MessageDigest.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)