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
Java 如何在hibernate事件侦听器中获取当前登录用户_Java_Spring_Hibernate_Tomcat_Servlets - Fatal编程技术网

Java 如何在hibernate事件侦听器中获取当前登录用户

Java 如何在hibernate事件侦听器中获取当前登录用户,java,spring,hibernate,tomcat,servlets,Java,Spring,Hibernate,Tomcat,Servlets,我正在使用hibernate事件侦听器记录上次修改的时间。我使用一个自定义的积分器来注册事件侦听器。如前所述,我通过在META-INF中创建一个具有特定名称的文件来注册integrator。我还想记录当前登录用户的用户名。我假设信息会出现在HttpSession中。但是在中,我没有访问HttpSession的权限。如何获取HttpSession,或者是否有其他方法获取当前登录的用户?我见过的最常见的解决方案是,当请求传入时,使用servlet过滤器将信息放入ThreadLocal,因此,您可以在

我正在使用hibernate事件侦听器记录上次修改的时间。我使用一个自定义的积分器来注册事件侦听器。如前所述,我通过在META-INF中创建一个具有特定名称的文件来注册integrator。我还想记录当前登录用户的用户名。我假设信息会出现在HttpSession中。但是在中,我没有访问HttpSession的权限。如何获取HttpSession,或者是否有其他方法获取当前登录的用户?

我见过的最常见的解决方案是,当请求传入时,使用servlet过滤器将信息放入
ThreadLocal
,因此,您可以在堆栈的任意位置从静态上下文访问它。

您可以在singleton类中创建一个实用程序方法,并放入以下代码行,该行代码随时返回登录的Usrename

SecurityContextHolder.getContext().getAuthentication().getPrincipal()
我使用Spring+Hibernate在我的web应用程序中也这样做了


希望这也能对您有所帮助。

我想我应该提到我正在使用spring。不知道这会有什么不同吗?我可以创建一个servlet过滤器,并且我可以访问会话中的用户对象。如何将其传递给eventlistener。此外,这个问题困扰着我:好吧,也许我可以在destroy方法中删除本地线程。用用户对象填充它。访问EntitySaveListener中的公共静态变量。将其添加到数据库表以记录更新记录的人。它似乎起作用了。您能否提供更多关于使用此方法的注意事项或问题的详细信息?我肯定在线程中看到了密码。我还将在servlet过滤器中使用threadLocal.set(null)。还有什么我应该注意的吗?