Как я могу получить имя пользователя, вошедшего в систему, используя JDBCRealm? - PullRequest
3 голосов
/ 13 июля 2011

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

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

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

Ответы [ 3 ]

8 голосов
/ 13 июля 2011

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

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

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

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

2 голосов
/ 13 июля 2011

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

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

2 голосов
/ 13 июля 2011

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

...