因此,我已经查看了与 ViewExpiredException 相关的答案并使用 Ajax 请求处理这个问题,现在我已经很好地处理了。但是,我的配置无法正确获取 ViewExpiredException。
该应用程序有一个 SecurityFilter ,它监视每个请求并确定 url 是否需要经过身份验证的用户,然后检查用户是否经过身份验证(在会话中查找用户对象)。
问题是过滤器在 JSF 实际确定 ViewExpiredException 之前处理请求,因此我们将它们转发到登录页面,因为它们没有经过身份验证。发生这种情况是因为会话已过期并且用户对象不再在会话中。
如果我删除了安全过滤器,我们就会得到 ViewExpiredException。
我的问题是我应该使用不同的技术来验证授权吗?一种允许 JSF 处理请求然后检查授权的方法?
我还认为可能只在获取而不是发布帖子时检查授权,然后我确实得到了 ViewExpiredException 但是如果有人直接使用 POST,则会在授权中留下一个空白。
最大的问题是我无法在过滤器中确定会话是否超时或用户输入了未经授权的 URL。无论它们被重定向到登录页面,结果都是相同的,但随后无法确定错误消息。
注意:我们使用的是 MyFaces、JSF 2.2 和 PrimeFaces
任何建议都非常感谢!