这个问题与我的另一个问题" 如何在Java Web应用程序中过期会话时重定向到登录页面? "有关.以下是我正在尝试做的事情:
现在面临着我所面临的挑战.由于我正在使用JBoss AS,当会话到期时,JBoss会自动将我重定向到登录页面(请注意,不会调用会话到期检查过滤器).因此,在我登录后,我的SessionExpiryCheckFilter拦截了请求,并且它看到会话可用.但是,它抛出异常javax.faces.application.ViewExpiredException: viewId:/mypage.faces - View /mypage.faces could not be restored.
以前有人遇到过这个问题吗?有什么想法可以解决这个问题?
我正在开发一个JSF Web应用程序,如果视图过期,我需要在其中显示"Session Expired"页面,但是所有其他页面都需要一个常规技术错误页面.当我触发异常时,应用程序仅进入技术错误页面.这是错误页面定义:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/jsps/utility/sessionExpired.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/jsps/utility/technicalError.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/jsps/utility/technicalError.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
我删除了technicalError.jsp错误页面元素,它工作正常,但当我把它们放回去时,我无法访问sessionExpired.jsp页面.如何告诉Web容器评估这些标记的顺序,以便出现正确的页面?谢谢.
jsf web.xml servlets custom-error-pages viewexpiredexception
JSF 2.0 View Scope"后退按钮"安全吗?例如,如果我在View Scope中存储模型并从第1页,第2页,第3页到第4页,沿途修改模型对象(通过输入字段),然后点击后退按钮两次返回页面2并进行更改(再次转到第3页),视图范围中的模型是否仅包含最初呈现第2页时所做的更改,还是后续页面的更改?
Oracle ADF具有/称之为"进程范围"的东西,它通过标记放置到会话中的内容来处理此问题,因此每个页面都有自己的模型副本.
在我们的JBoss 7.1.1上的JSF2项目中,我们定义了一个会话超时web.xml,它工作得很好.
但是,有时候我们会看到视图过期,导致像这样的错误,即使会话仍然存在:
javax.faces.application.ViewExpiredException: viewId:/... - View /... could
not be restored.
Run Code Online (Sandbox Code Playgroud)
我们在哪里可以设置视图超时,就像我们为会话所做的那样?或者视图是否由其他内容引起?
我一直在看这个主题的很多帖子,但无法得到一个适用于我的案例的解决方案.
我正在使用带有JSF 2.0的Java EE 6(部署在JBoss AS 7.1上)
在我的web.xml身上:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
当会话自动超时时,我希望将用户重定向到登录页面.
我试过的:
方法1:使用过滤器
我试过以下过滤器:
@WebFilter()
public class TimeOutFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
System.out.println("filter called");
final HttpServletRequest req = (HttpServletRequest) request;
final HttpSession session = req.getSession(false);
if (session != null && !session.isNew()) {
chain.doFilter(request, response);
} else {
System.out.println("Has timed out");
req.getRequestDispatcher("/logon.xthml").forward(request, response);
}
} …Run Code Online (Sandbox Code Playgroud) 我在尝试提交表单时遇到以下异常.
javax.faces.application.ViewExpiredException: /page1.xhtml No saved view state could be found for the view identifier: /page1.xhtml
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:132)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:94)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at …Run Code Online (Sandbox Code Playgroud) primefaces jsf-2 viewexpiredexception view-scope notserializableexception
我有一个登录页面,我有一个User bean来验证一个人的用户名和密码.这个Bean是Session Scoped.如果有人写了一个URL并尝试跳转登录页面,我该如何检查并将其重定向到登录页面?
另一方面.假设我已经登录并且我正在工作,突然我出去了一段时间,我的会话到期了.当我返回并尝试与表单交互时,它会发送一条消息,提醒我会话到期.发生这种情况时,如何再次重定向到登录表单?
提前致谢.希望我解释一下自己.
Mojarra 2.1.4,Tomcat 7,Tomahawk 1.1.11
我有一个使用Mojarra 2.2.9的JSF应用程序,并在WebSphere 8.5.5.4上部署在集群环境中并javax.faces.STATE_SAVING_METHOD设置为client.
即使我的所有应用程序bean都是请求作用域,有时候当用户会话有效并且用户在他获得的页面上进行发布请求时ViewExpiredException.可能导致此问题的原因以及如何解决?将改变javax.faces.STATE_SAVING_METHOD以server解决呢?如果是这样,这对内存有什么影响?
此外,这是否与集群环境有关,也许Websphere上有一些缺少配置可以解决问题?
我有一个我无法解决的问题.当我在页面空闲后刷新打开的JSF页面例如10分钟时,我收到以下错误消息:
serverError: class javax.faces.application.ViewExpiredException viewId:/page.jsf - View /page.jsf could not be restored.
Run Code Online (Sandbox Code Playgroud)
我怎样才能增加JSF查看时间?
在我AuthenticationFilter重定向到登录页面后,我想退出给用户.
这就是为什么,我把identity.logout();我的预渲染方法checkPermission(...)的login.xhtml.
但是,我得到ViewExpiredException了用户再次登录的时间.
我的问题是
1:如果我不这样做identity.logout();,用户再次重新登录,因为旧的用户会话仍然存在.
2:如果我这样做identity.logout();,我会ViewExpiredException在用户再次登录时获得.
AuthenticationFilter.java
public class AuthenticationFilter implements Filter {
.....
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
HttpSession session = httpRequest.getSession();
User user = (User) session.getAttribute(Constants.LOGIN_USER);
if (user == null) {
session.setAttribute(Constants.MESSAGE_ID, MessageId.REQUIRED_TO_LOGIN);
String loginView = httpRequest.getContextPath() + Constants.LOGIN_PAGE;
httpResponse.sendRedirect(loginView);
} else if …Run Code Online (Sandbox Code Playgroud) jsf ×7
jsf-2 ×5
java ×3
session ×3
timeout ×2
java-ee ×1
jsf-2.2 ×1
primefaces ×1
seam ×1
servlets ×1
view ×1
view-scope ×1
web.xml ×1
websphere ×1
websphere-8 ×1