我已启用CSRF
保护,并且在以下情况中导致问题。
会话超时,用户单击触发需要用户登录的操作的按钮。由于会话现已过期,用户首先进入登录页面,然后重定向到操作。用户请求的操作网址保留在登录网址中,其中包含过期的p_auth
参数,这会导致错误
我不想从CSRF
保护中排除此操作。有没有办法定义在过期的身份验证令牌时调用的默认操作?如果没有,那么有没有办法解决这个问题?
答案 0 :(得分:3)
嗯,这里的问题是Liferay存储了lastPath。由于lastPath还包含auth-token,因此这里有点棘手。 Liferay检测到会话已过期,并且正在重定向到登录页面。新登录后,将生成一个新的authToken并与该会话相关联。现在Liferay尝试将您重定向到存储的lastPath。这里旧的AuthToke仍然存在。这么多的分析。
可能有用的是:
创建自己的自定义PostLoginAction。在该操作中,您检查lastPath是否包含AuthToke。如果是,请将令牌的值替换为新值。将它保存回lastPath并交叉手指。实际上我并不是100%肯定这是否会奏效,但我认为应该能够解决问题。
[编辑]
这就是你获得新的AuthToken的方法:
AuthTokenUtil.getToken(request)
请求将是一个HTTPServletRequest对象,它方便地是Action方法中的参数。