2015-06-01 1 views
1

Я хочу сделать приложение javaEE, когда пользователи могут зарегистрироваться и подтвердить свое письмо при получении электронной почты со ссылкой после вставки их данных в регистрационную форму (имя, почту .. .)Приложение JavaEE создает уникальный ключ, используя java.util.UUID

Для этого я собираюсь создать длинный и уникальный ключ с помощью java.util.UUID, сохранить в базе данных и затем отправить электронное письмо пользователю с этим ключом, являющимся частью URL-адреса (пример: www .mysite.com/account.xhtml? ID = КЛЮЧ). Затем пользователь нажимает на ссылку, я извлекаю ключ из URL-адреса и проверяю, сохранен ли этот ключ в БД. Если это так, регистрация пользователя будет завершена.

Мой вопрос: при создании этого ключа с java.util.UUID, как я могу узнать, что это уникальный ключ? Должен ли я проверить, есть ли еще один равный ключ в БД и если так создать новый, пока созданный ключ не станет уникальным?

ответ

2

Какова вероятность того, что случайное генерируемое 128-битное целое будет равно другому произвольно генерируемому целому числу?

Если вам просто нужно спокойствие, используйте первичный ключ, и если вставка завершится неудачей из-за столкновения с ключом, заново создайте новый UUID и повторите попытку вставки.

0

Есть несколько способов, которыми вы можете использовать UUID в Java.

Java 5 более совершенная практика использует java.util.UUID Это размер строки 36 символов. Эта ссылка дает вам простой example.

Эта дискуссия даст вам answer to your question. Он очень силен. Я никогда не сталкивался с тем, что кто-то жалуется на его уникальность.

Но если вы добавите в БД или используете его в хранилище или используете через сеть, размер может иметь значение. Поэтому преобразование в другие форматы - Базы - хорошее решение (Base64, Base85 и т. Д.). Пожалуйста, проверьте это обсуждение here. Вы можете использовать библиотеку apache org.apache.commons.codec.binary.Base64. Base85 не безопасен для URL-адресов.

Моя рекомендация заключается в том, что если у вас есть приложения/сеансовые бобы/веб-службы (многие соединения других приложений и передачи данных и т. Д.), Они создают UUID, я также предпочитаю заполнять уникальное дополнение имени приложения. Как APP1, APP2 и т. Д., А затем декодируются на другие базы. Если UUID является 6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8, затем APP1-6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8, как ...

Хотя от темы здесь, но когда вы используете URL, как это www.mysite.com/account.xhtml?id=KEY, будьте осторожны с атаками взлома SQL-инъекций.

+0

Благодарим вас за ответ. Я хотел бы знать, как я могу активировать новую учетную запись по электронной почте, когда пользователи регистрируются в моем приложении javaEE и не позволяют моему приложению подвергаться атакам взлома SQL-атак. Тогда я мог бы следовать этому методу, описанному здесь BalusC? http://stackoverflow.com/questions/5431061/how-send-automatic-reply-on-particular-email-id-when-an-user-registers/5431853#5431853 – jose

Смежные вопросы