我已启用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方法中的参数。