Создание URL-адресов активации в Java EE 6

Я разрабатываю веб-приложение с использованием веб-профиля Java EE 6. Я хочу отправить новому пользователю по электронной почте ссылку для активации его учетной записи. Как мне это реализовать? Я использую JSF2. Есть ли какая-либо спецификация или рекомендуемый способ сделать это?


person arg20    schedule 02.02.2011    source источник
comment
Вы хотите, как создать key, который необходимо отправить с URL-адресом активации, или вы хотите создать URL-адрес с возможностью закладки в JSF?   -  person Nishant    schedule 02.02.2011
comment
точно, пользователь регистрируется, и ему на электронную почту отправляется URL-адрес с ключом, например: нажмите на mysite.com /activate?key=dsafadsfwe, чтобы активировать свою учетную запись.   -  person arg20    schedule 02.02.2011
comment
Может быть, если бы я мог получить доступ к URL-адресу из jsf и получить ключевой параметр или что-то в этом роде   -  person arg20    schedule 02.02.2011
comment
Связано: stackoverflow.com/questions/3295245/   -  person BalusC    schedule 02.02.2011


Ответы (2)


Я работал над проектом, который требовал от пользователя подтверждения своего адреса электронной почты для активации регистрации. Процесс генерации ключа был таким:

Создание ключа

  1. Создайте столбец verification_key в таблице users, содержащий уникальный ключ проверки для пользователя.
  2. Используйте Хэш SHA256 вашего уникального имени пользователя (в данном случае — идентификатора электронной почты) с солью в качестве пароля.
  3. Преобразуйте хэш в base64 и сохранить в verification_key этого пользователя. Это будет уникально (для практических целей я бы не стал вдаваться в вероятность столкновения).

Итак, итог, key = Base64(Hash256(uniqueUserName+"."+password))

......

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

Подтверждение

  1. Поскольку мы знаем, что verification_key уникален, получите key из параметра запроса и найдите соответствующую строку.
  2. Если найдено, установите verification_key как null (это также уменьшит вероятность коллизии, если таковая имеется) и перенаправит пользователя на «успешно проверенную страницу».
  3. Если не найдено, направьте пользователя на страницу «уже активировано/ключ не найден/401».
person Nishant    schedule 02.02.2011
comment
Привет. Это очень полезный ответ, большое спасибо. Я хочу узнать еще одну вещь из вашей реализации. После того, как пользователь активирован, вам не нужно будет снова проверять каждый раз, когда он пытается что-то сделать, поэтому должен ли я иметь другую таблицу, скажем, pending_users, чтобы, если пользователь находится в пользовательской таблице, я мог предположить, что он активирован? - person arg20; 02.02.2011
comment
UUID.randomUUID() может использоваться для генерации случайного числа - person Christophe Roussy; 02.01.2012

URL-адрес активации создает впечатление, что программная служба обрабатывает «сервисный» запрос.

Хорошие кандидаты для реализации этой службы включают сервлеты, которые будут выполнять активацию/проверку пользователя и перенаправлять на страницу успеха JSF.

person Ryan Fernandes    schedule 02.02.2011
comment
Я никогда раньше не использовал сервлеты с jsf2, так как они мне никогда не были нужны. Не могли бы вы показать мне фрагмент кода, пожалуйста? - person arg20; 02.02.2011