2011-03-25 2 views
3

GlassFish 3.0.1에 배포 된 비교적 간단한 웹 응용 프로그램이 있습니다. 일반 FORM 기반 인증을 사용하고 있으며 응용 프로그램에서 JDBC 영역을 사용하여 보안을 유지합니다. 뷰는 JSF 2에서 Facelets를 사용하여 처리됩니다.Java EE 6에서 세션 시간 초과를 완벽하게 처리합니다.

내가 가진 문제는 사용자가 h : commandButton이나 다른 게시물을 클릭하면 세션이 만료 될 때 XML 구문 분석 오류가 발생했다는 끔찍한 노란색 페이지가 표시된다는 것입니다. 로그에서 나는 3 개의 스택 트레이스를 얻었습니다.

INFO: PWC2787: Session event listener threw exception 
org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped 
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:679) 
at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:138) 
at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100) 
<snip> 

WARNING: ApplicationDispatcher[/core] PWC1231: Servlet.service() for servlet Faces Servlet threw exception 
javax.faces.application.ViewExpiredException: viewId:/login.xhtml - View /login.xhtml could not be restored. 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
<snip> 

WARNING: Unexpected error forwarding or redirecting to login page 
javax.servlet.ServletException: viewId:/login.xhtml - View /login.xhtml could not be restored. 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:822) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:517) 
<snip> 

이 문제를 다루는 깨끗하고 간단한 방법을 찾을 수 없습니다. web.xml에서 ViewExpiredException에 대한 오류 처리기를 설정하려고했지만 결코 호출되지 않았습니다. 나는 시스템이 이미 첫 번째 예외에 의해 포기한 것으로 짐작하고있다. 바로 지금 나는 죽음의 옐로우 페이지가 보이지 않는 한이 상황에서 사용자를 보내는 곳을별로 신경 쓰지 않는다!

참고 : 비 포스트 백 링크 작업은 로그인 페이지를 찾아 올바르게 리디렉션합니다.

답변

1

유감스럽게도이 문제를 해결할 표준 방법은 없습니다. 우리는 꽤 많은 조사를 한 후에 발견 한 것이 없습니다.

당신이 할 수있는 것은 :

(1) 얼굴-config.xml 파일에 자신의 JSF-ExceptionHandler를 등록하고 당신이, 그 후/로그인 페이지를 오류 -로 리디렉션하려면 어떤 예외 처리합니다. 완전히 사소한 것은 아니지만 확실히 가능합니다. 그것이 우리가하는 방식입니다.

(2) Seam-Catch을보고 (사용하고 있지만) 동일한 메커니즘을 사용하고 있지만 (더 우아한 CDI를 따르는 방식으로) 2 개월 전 준비가되지 않았기 때문에 사용하지 않았습니다. .

관련 문제