2010-05-04 10 views
5

Estoy desarrollando una aplicación web usando GXT, Hibernate, mysql, etc. Hay una página de inicio de sesión para la aplicación. En realidad, tengo problemas para configurar la página de inicio de sesión cuando expira la sesión. Podemos establecer el tiempo de espera en el archivo web.xml, pero en ese caso no podemos redireccionar a la página de inicio de sesión. ¿Puede decirme cómo lograr eso?GXT: Cómo traer la página de inicio de sesión cuando la sesión expira

Respuesta

2

que han utilizado el concepto de lanzar una excepción en el lado del servidor cuando la sesión caduca y luego trató de capte la excepción en el lado del cliente. No sé si hay alguna forma mejor de hacerlo.

2

No se puede redireccionar el servidor porque la aplicación es completamente AJAX. Lo que puede hacer es usar la clase de temporizador GWT y para cada una de sus llamadas RPC verificar/reiniciar el temporizador. Si la "sesión" expira, se redirige a la página de inicio de sesión mediante un token de Historial. Esta era la forma más fácil para mí

Algunos otra lectura:

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b9eab8daaa993c83/d0192d356045e061?pli=1

http://gwt-ext.com/forum/viewtopic.php?f=9&t=1682

2

En el lado del servidor, puede verificar si la sesión ha expirado y, de ser así, lanzar una excepción personalizada. En el lado del cliente, en cada llamada asincrónica haces un control para esta situación conocida y reaccionas. Puede crear una clase abstracta para AsyncCallback que va subclase para cada llamada RPC GWT:

public abstract class SessionExpiredAwareAsyncCallback<T> implements AsyncCallback<T> { 

    @Override 
    public void onSuccess(T returnObject) { 
     doOnSuccess(returnObject); 
    } 

    @Override 
    public void onFailure(Throwable exception) { 
     if (exception instanceof SessionExpiredException) { 
      goToLoginPage(); 
     } else { 
      doOnFailure(exception); 
     } 
    } 

    public abstract doOnSuccess(T returnObject); 

    public abstract doOnFailure(Throwable exception); 
} 
1

se puede utilizar gwteventservice para disparar un evento desde el servidor al cliente.

Cuestiones relacionadas