会话超时后无效的身份验证令牌

时间:2015-06-15 10:22:27

标签: java authentication liferay csrf

我已启用CSRF保护,并且在以下情况中导致问题。

会话超时,用户单击触发需要用户登录的操作的按钮。由于会话现已过期,用户首先进入登录页面,然后重定向到操作。用户请求的操作网址保留在登录网址中,其中包含过期的p_auth参数,这会导致错误

我不想从CSRF保护中排除此操作。有没有办法定义在过期的身份验证令牌时调用的默认操作?如果没有,那么有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

嗯,这里的问题是Liferay存储了lastPath。由于lastPath还包含auth-token,因此这里有点棘手。 Liferay检测到会话已过期,并且正在重定向到登录页面。新登录后,将生成一个新的authToken并与该会话相关联。现在Liferay尝试将您重定向到存储的lastPath。这里旧的AuthToke仍然存在。这么多的分析。

可能有用的是:

创建自己的自定义PostLoginAction。在该操作中,您检查lastPath是否包含AuthToke。如果是,请将令牌的值替换为新值。将它保存回lastPath并交叉手指。实际上我并不是100%肯定这是否会奏效,但我认为应该能够解决问题。

[编辑]

这就是你获得新的AuthToken的方法:

AuthTokenUtil.getToken(request)

请求将是一个HTTPServletRequest对象,它方便地是Action方法中的参数。

相关问题