Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF ViewExpired与SecurityFilter混合_Security_Jsf_Jsf 2_Myfaces_Viewexpiredexception - Fatal编程技术网

JSF ViewExpired与SecurityFilter混合

JSF ViewExpired与SecurityFilter混合,security,jsf,jsf-2,myfaces,viewexpiredexception,Security,Jsf,Jsf 2,Myfaces,Viewexpiredexception,因此,我已经回顾了与ViewExpiredException相关的答案,并用Ajax请求处理了这些问题,现在我已经很好地处理了这些问题。但是,我有一个配置没有正确获取ViewExpiredException 应用程序有一个SecurityFilter,它监视每个请求并确定url是否需要经过身份验证的用户,然后检查用户是否经过身份验证(在会话中查找用户对象) 问题是过滤器处理的请求在JSF实际确定ViewExpiredException之前,因此我们将它们转发到登录页面,因为它们没有经过身份验证。

因此,我已经回顾了与ViewExpiredException相关的答案,并用Ajax请求处理了这些问题,现在我已经很好地处理了这些问题。但是,我有一个配置没有正确获取ViewExpiredException

应用程序有一个SecurityFilter,它监视每个请求并确定url是否需要经过身份验证的用户,然后检查用户是否经过身份验证(在会话中查找用户对象)

问题是过滤器处理的请求在JSF实际确定ViewExpiredException之前,因此我们将它们转发到登录页面,因为它们没有经过身份验证。这是因为会话已过期,并且用户对象不再在会话中

如果我删除了安全过滤器,那么我们会得到ViewExpiredException

我的问题是我应该使用不同的技术来验证授权吗?一个允许JSF处理请求,然后检查授权的程序

我还认为可能只有当它是get而不是post时才检查授权,然后我确实会得到ViewExpiredException,但是如果有人直接使用post,则会在授权中留下一个巨大的漏洞

最大的问题是,我无法在筛选器中确定会话是否超时,或者用户是否键入了他们无权访问的URL。无论它们被重定向到登录页面,结果都是相同的,但是无法确定错误消息

注意:我们使用的是MyFaces、JSF2.2和PrimeFaces


非常感谢您的任何建议

如果您使用的是tomcat容器,那么它会为请求维护一个会话,为所需的servlet创建一个线程,然后在该线程中处理该servlet的HttpRequest和HttpResponse对象。现在,每当您在完成任何更改后刷新浏览器页面时,请求将获得会话并呈现页面

现在假设您已经对项目进行了一些配置更改,然后可能会要求您重新启动apache服务器,这反过来会清除tomcat容器创建的所有会话,有时您会遇到ViewStateExpired异常