Я пытаюсь обновить каждую сущность своим @EntityListeners({ ModelListener.class })
.
ModelListener
реализует @PrePersist
с помощью метода, подобного этому:
@PrePersist
protected void prePersist(final ModelBase modelBase) {
modelBase.setUpdatedBy(currentUser);}
У меня вопрос как получить текущего пользователя.
Я уже пробовал несколько вещей:
1) передать информацию по EJB
@EJB
private UserModul userModul;
userModul
всегда равен нулю, когда вызывается prePersist
. Кажется, EJB-контекст недоступен.
2) Заполнить статический поток локальный
static ThreadLocal<User> currentUser = new ThreadLocal<User>();
Из-за статического атрибута каждый загрузчик классов (каждый запрос на веб-серверах) содержит свой собственный экземпляр. Я попытался с @WebFilter
, чтобы заполнить ThreadLocal
. Но, похоже, у меня нет контекста лиц.
public void doFilter(final ServletRequest request, ...){
FacesContext.getCurrentInstance();} //always null
Также в запросе (com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest
) Я не нахожу никакой информации вошедшего в систему пользователя.
Какой самый распространенный способ сохранения информации о пользователе?