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

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

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

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


person fareed    schedule 12.07.2011    source источник


Ответы (3)


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

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

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

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

person Vineet Reynolds    schedule 12.07.2011
comment
FacesContext.getExternalContext().getUserPrincipal();? Разве это не должно быть похоже на FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();? Существовало ли это в некоторых более старых версиях JSF на момент написания этого поста? - person Tiny; 11.12.2014
comment
@Tiny, да, статический метод getCurrentInstance() должен быть вызван первым, если у вас нет экземпляра FacesContext. - person Vineet Reynolds; 15.12.2014

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

person fvu    schedule 12.07.2011
comment
Существует ли сейчас этот FlexibleJDBCRealm в некоторых версиях GlassFish? В конце этой связанной страницы упоминается: Я связался с SUN в надежде, что FlexibleJdbcRealm (или что-то с аналогичной гибкостью) будет добавлено в будущую версию Glassfish. - person Tiny; 11.12.2014
comment
@tiny Не то, чтобы я знал об этом. Но последнее сообщение в списке рассылки говорит, что текущая версия также работает на гф4. - person fvu; 11.12.2014

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

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

person Kal    schedule 12.07.2011