Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 审核webapp中的JPA实体:如何获取登录用户?_Spring_Web Applications_Jpa_Auditing - Fatal编程技术网

Spring 审核webapp中的JPA实体:如何获取登录用户?

Spring 审核webapp中的JPA实体:如何获取登录用户?,spring,web-applications,jpa,auditing,Spring,Web Applications,Jpa,Auditing,我对我的JPA实体有一个简单的审计要求:保留创建和最后修改日期以及作者。作者应该是当前登录的用户 我想在基类上使用@PrePersist和@PreUpdate注释或JPA拦截器(无其他框架)来实现这一点 但是,在这两种情况下,我都需要一种访问当前登录用户的方法,该用户存储在HttpSession中 如何从基本实体类上的方法或JPA拦截器访问此信息 关于如何实现这一点,是否有任何最佳实践或任何经过测试的方法 我在想,也许可以为每个请求添加一个web拦截器,将登录的用户对象放入一个全局可访问的Thr

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

我想在基类上使用
@PrePersist
@PreUpdate
注释或JPA拦截器(无其他框架)来实现这一点

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

如何从基本实体类上的方法或JPA拦截器访问此信息

关于如何实现这一点,是否有任何最佳实践或任何经过测试的方法

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

这听起来是个好主意吗

欢迎任何建议

编辑:在此处发现类似问题(仅在通过右侧的建议发布我自己的建议后才发现):


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

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

是的,容器是Tomcat,因此它应该可以工作。。。关于清理,您是对的,因此我最终使用了一个ThreadLocal对象,封装在服务bean中,以及一个拦截器,该拦截器将用户设置在传入请求上,并在处理后对其进行清理。它很好用。