Если ваши пользователи аутентифицируются в контейнере, вы можете получить доступ к имени пользователя в ejb, используя внедренный экземпляр javax.ejb.SessionContext
, например:
@Resource
private SessionContext context;
private String getCurrentUsername() {
return context.getCallerPrincipal().getName();
}
Редактировать: Этоработает, если аутентификация настроена в web.xml через элементы login-config и security-constraint.Если вы выполняете аутентификацию самостоятельно, вы можете использовать ServletFilter и HttpServletRequestWrapper, которые переопределяют getUserPrincipal, getRemoteUser и isUserInRole (протестировано в glassfish).
Если вы обрабатываете аутентификацию в бине jsf, то это, вероятно, не будет работать,поскольку ejb уже будет инициализирован и введен.Однако вы также можете создать ejb в области сеанса, который просто содержит имя пользователя и внедрить этот bean-компонент в bean-компоненты без сохранения состояния.