所以我已经回顾了与ViewExpiredException相关的答案并使用Ajax请求处理这个问题,现在我已经很好地处理了。但是,我的配置无法正确获取ViewExpiredException。
应用程序有一个SecurityFilter,它监视每个请求并确定url是否需要经过身份验证的用户,然后检查用户是否经过身份验证(在会话中查找用户对象)。
问题是过滤器处理请求,这是在JSF实际确定ViewExpiredException之前,因此我们将它们转发到登录页面,因为它们未经过身份验证。发生这种情况是因为会话已过期且用户对象不再在会话中。
如果我删除安全过滤器,那么我们会得到ViewExpiredException。
我的问题是我应该使用不同的技术来验证授权吗?允许JSF处理请求然后检查授权的那个?
我还认为可能只检查授权,当它是一个获取而不是一个帖子,然后我得到了ViewExpiredException但是如果有人直接使用POST,那么在授权中会留下一个空洞。
最大的问题是我无法在过滤器中确定会话是否已超时或用户是否输入了未经授权的URL。无论是否重定向到“登录”页面,结果都是相同的,但无法确定错误消息。
注意:我们正在使用MyFaces,JSF 2.2和PrimeFaces
非常感谢任何建议!
答案 0 :(得分:-1)
如果您正在使用tomcat容器,那么它维护一个请求的会话,为所需的servlet创建一个线程,然后处理该线程中该servlet的HttpRequest和HttpResponse对象。现在,每当您完成任何更改后刷新浏览器页面,请求都会获得会话并呈现您的页面。
现在假设您已对项目进行了一些配置更改,然后可能会要求您重新启动apache服务器,这样可以清除tomcat容器创建的所有会话,并且有时会出现ViewStateExpired异常。