Java 如何在hibernate事件侦听器中获取当前登录用户
我正在使用hibernate事件侦听器记录上次修改的时间。我使用一个自定义的积分器来注册事件侦听器。如前所述,我通过在META-INF中创建一个具有特定名称的文件来注册integrator。我还想记录当前登录用户的用户名。我假设信息会出现在HttpSession中。但是在中,我没有访问HttpSession的权限。如何获取HttpSession,或者是否有其他方法获取当前登录的用户?我见过的最常见的解决方案是,当请求传入时,使用servlet过滤器将信息放入Java 如何在hibernate事件侦听器中获取当前登录用户,java,spring,hibernate,tomcat,servlets,Java,Spring,Hibernate,Tomcat,Servlets,我正在使用hibernate事件侦听器记录上次修改的时间。我使用一个自定义的积分器来注册事件侦听器。如前所述,我通过在META-INF中创建一个具有特定名称的文件来注册integrator。我还想记录当前登录用户的用户名。我假设信息会出现在HttpSession中。但是在中,我没有访问HttpSession的权限。如何获取HttpSession,或者是否有其他方法获取当前登录的用户?我见过的最常见的解决方案是,当请求传入时,使用servlet过滤器将信息放入ThreadLocal,因此,您可以在
ThreadLocal
,因此,您可以在堆栈的任意位置从静态上下文访问它。您可以在singleton类中创建一个实用程序方法,并放入以下代码行,该行代码随时返回登录的Usrename
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
我使用Spring+Hibernate在我的web应用程序中也这样做了
希望这也能对您有所帮助。我想我应该提到我正在使用spring。不知道这会有什么不同吗?我可以创建一个servlet过滤器,并且我可以访问会话中的用户对象。如何将其传递给eventlistener。此外,这个问题困扰着我:好吧,也许我可以在destroy方法中删除本地线程。用用户对象填充它。访问EntitySaveListener中的公共静态变量。将其添加到数据库表以记录更新记录的人。它似乎起作用了。您能否提供更多关于使用此方法的注意事项或问题的详细信息?我肯定在线程中看到了密码。我还将在servlet过滤器中使用threadLocal.set(null)。还有什么我应该注意的吗?