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

会话超时,用户单击触发操作的按钮,该操作要求用户登录。随着会话现在到期,用户首先进入登录页面,然后重定向到该操作。用户请求的操作URL使用过期的p_auth参数保留在登录URL中,这将导致错误

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

最佳答案

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

可能的工作是:

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

[编辑]

这是获取新的AuthToken的方法:

AuthTokenUtil.getToken(request)


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

08-25 22:25