2016-10-07 2 views
1

Я использую область JDBC Glassfish для аутентификации пользователей, поэтому процесс аутентификации управляется ее контейнером. Мне нужно использовать имя пользователя/адрес электронной почты в качестве имени пользователя. И userid, и адрес электронной почты имеют другой столбец в таблице пользователей postgres, и я использую JPA. Короче говоря, пользователь может войти в систему по его идентификатору пользователя или по электронной почте.JSF JDBC поиск на основе формы на основе имени по имени пользователя и адресу электронной почты

Я написал программные методы входа и выхода из системы. Войти имеет только два аргумента

request.login(username, password);

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

enter image description here

в рисунке ниже я могу просто ввести USERID от я хотел бы иметь столбец EMAIL, а также. enter image description here

любые предложения/намеки/идеи были бы заметны.

+0

ОК функциональное требование: пользователь должен иметь возможность использовать свой идентификатор пользователя или адрес электронной почты в текстовом поле имени пользователя. В веб-консоли на стеклянной панели мы должны явно определить имя пользователя, но в моем случае для проверки подлинности должно быть два столбца в таблице базы данных. как определить или реализовать этот тип аутентификации. Я уже использовал процесс аутентификации только по имени пользователя и паролю и отлично работал. –

ответ

1

Есть Serveral подходы вы можете взять с собой:

  1. Если вы не заинтересованы в имени пользователя, но только тот факт, что пользователь аутентифицирован правильно, вы можете использовать вид базы данных unioning идентификатор пользователя и адрес электронной почты в одна колонка:

    CREATE VIEW Vusers AS
    SELECT, идентификатор пользователя, пароль от пользователей, где идент NOT NULL
    UNION ALL
    ВЫБРАТЬ электронной почты, пароль от пользователей где адрес электронной почты НЕ НЕТ

    (обратите внимание, что этот синтаксис не ожидается)
    Теперь вы можете перенаправить конфигурацию JDBC в это представление.

    Возможно, это не так, как вы не хотите идти. В большинстве случаев после аутентификации принимаются некоторые решения на основе имени входа. Теперь это может быть либо электронная почта, либо userid. Лучше всего уникальное имя входа для одного и того же человека.

  2. Обработать имя пользователя перед входом через HttpServletRequest#login: Так как идентификатор пользователя и адрес электронной почты, как правило, имеют различные форматы, вы можете решить
    , что один пользователь при условии, в форме входа.

    • Если это идентификатор пользователя, вы можете использовать метод HttpServletRequest#login напрямую.
    • Если это электронное письмо, вы можете найти идентификатор пользователя для электронной почты, а затем использовать HttpServletRequest#login.

    Этот способ. вы больше не можете использовать регистрацию формы Glassfish, но в качестве имени входа всегда указывается идентификатор пользователя.

    См https://docs.oracle.com/cd/E19798-01/821-1841/gircj/index.html

  3. Написать свой собственный модуль входа в систему:
    Вы можете написать свой собственный Войти модуль JAAS. Есть несколько учебных пособий. Тем не менее, это в основном сводилось бы к различию между электронной почтой и идентификатором пользователя, поэтому метод 2 должен быть достаточным.

+0

Спасибо, что спасли мою жизнь. :) Я также подумал о предварительной обработке имени пользователя, но не нажал на мой взгляд :) –

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