Hibernate会话级缓存:登录问题

时间:2013-06-25 17:34:45

标签: hibernate java-ee second-level-cache

这是我的一位前辈问我的问题。

1)我们有两个不同的J2EE应用服务器节点:节点1和节点2.(如下图所示。)

2)还启用了休眠二级缓存。

3)问题如下:用户点击登录页面URL并假设此请求进入节点1和用户登录,然后用户登出。

4)再次用户请求登录页面,这次请求转到节点2.现在用户登录并更改密码并注销。

  
    

现在问题是当用户尝试使用他的新密码登录时     请求转到节点1.他是否可以登录系统?

  
     

如果他无法做到,可以做些什么来让用户登录   他在Node 1上的新密码。

Note: We have a LoginUser table where the Username and passwords are stored. 

enter image description here

我的回答:

根据我的观点,当用户尝试使用节点1登录然后注销时可能会出现这种情况。

Hibernate触发此查询:

从登录中选择*,其中username =" John&#34 ;;

此条目缓存在节点1的二级缓存中。

现在,当他使用节点2登录系统并更改密码时。再次尝试登录节点1,他无法使用新密码登录,因为此时节点1的二级缓存包含旧密码,因此他可以使用旧密码登录。

这就是他无法使用新密码登录节点1的原因。

现在这个问题的解决方案可能是复制二级缓存。

  

请分享您对同一问题的意见。

1 个答案:

答案 0 :(得分:3)

问题的答案是分布式二级缓存,如Hibernate文档here中所述。 Infinispan是最受支持的平台。您可以阅读有关在Jboss wiki上设置此内容的信息。

当任一节点上的缓存数据发生更改时,这将使整个群集中的2LC无效。用户请求命中的节点将知道缓存是陈旧的,并将进入数据库以加载所需的新数据。