0

我对我的 JPA 实体有一个简单的审计要求:保留创建和最后修改日期和作者。作者应该是当前登录的用户。

我想在基类或 JPA 拦截器(没有额外的框架)上使用@PrePersist和注释来实现这个。@PreUpdate

但是,在这两种情况下,我都需要一种方法来访问当前登录的用户,该用户存储在 HttpSession 中。

如何从我的基实体类或 JPA 拦截器上的方法访问这些信息?

是否有任何最佳实践或任何经过测试的方法来实现这一目标?

我在想,也许添加一个网络拦截器,对于每个请求,将登录的用户对象放入全局可访问的 ThreadLocal 中(例如在 Spring 单例服务中),这样就可以从任何地方查找它......

这听起来是个好主意吗?

欢迎任何建议!

编辑:在此处找到类似的问题(仅在通过右侧的建议发布我自己的问题后才找到):在 JPA 实体中自动设置 createdBy 和 updatedBy

结论似乎朝着 ThreadLocal 的方向发展……不过,欢迎任何反馈!

4

1 回答 1

0

如果您不使用远程 (EJB) 调用,那么使用 ThreadLocal 的想法应该可行,因为大多数容器为每个处理的请求使用一个线程。放置用户和删除用户时需要小心,因为容器可能使用线程池,并且您不希望将用户对象附加到可能用于处理另一个请求的线程上。

于 2013-01-29T14:14:09.160 回答