Как я могу получить имя пользователя, вошедшего в систему, используя JDBCRealm?

Я использую Glassfish 3.0 и внедряю JDBCRealm для аутентификации при входе. Имя пользователя и роли сохраняются в таблице, которая называется usertable. Аутентификация работает как положено.

Но проблема теперь в том, что когда пользователь входит в систему, как я могу получить имя пользователя вошедшего в систему пользователя в приложении?

PS: я реализую страницу JSF и управляемый бин

3 ответа

Решение

В JSF вы можете получить текущий Принципал, связанный с запросом и, следовательно, текущий сеанс, используя ExternalContext объект, который можно получить из FacesContext, Принципал, связанный с запросом, доступен из ExternalContext с помощью getUserPrincipal() метод:

FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();

Вышеуказанный вызов может быть выполнен в управляемом компоненте JSF. Вы можете вызвать getName() метод объекта Principal для получения имени пользователя в виде строки.

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

Request.getRemoteUser или Request.getUserPrincipal, независимо от области, которую вы используете для аутентификации, поэтому, если вы используете область File для тестирования и область JDBC для производства, она будет работать в обоих случаях. Кстати, если вы используете JDBCRealm, обратите внимание на FlexibleJDBCRealm.

Ваш метод authenticate должен вернуть java.security.Principal, который будет содержать имя.

http://download.oracle.com/javase/1.4.2/docs/api/java/security/Principal.html

Другие вопросы по тегам