我正在尝试使用自己的@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)填充静态ThreadLocal
static ThreadLocal<User> currentUser = new ThreadLocal<User>();
由于static属性,每个类加载器(Web服务器中的每个请求)都拥有自己的实例。我尝试使用@WebFilter
来填充ThreadLocal
。但似乎我没有面子。
public void doFilter(final ServletRequest request, ...){
FacesContext.getCurrentInstance();} //always null
同样在请求中(com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest
)我找不到登录用户的任何信息。
保存用户信息的最常用方法是什么?