Control de sesión con sessiontimer.js en FundeWeb

Session Timer

Para añadir este control de sesión hay que seguir los siguientes cambios:

En los ficheros messages_??.properties añadir las propiedades:

sesion.cerrando.titulo=Sesi\u00F3n a punto de caducar

sesion.cerrando.texto=Su sesi\u00F3n caducará en

sesion.cerrar=Cerrar sesi\u00F3n

sesion.continuar=Continuar sesi\u00F3n

En el template.xhtml

    <h:outputScript library="js" name="sessiontimer.js" />
 
  • Quitar el tag p:idleMonitor
  • Donde estaba el tag p:idleMonitor añadir:
	<fdw:onloadScript> sessionController.ajaxCalled({sessionTime : "#{seamComponentsProperties['duracion.sesion.miliseg']}"}); </fdw:onloadScript>
	<p:dialog id="cerrandoSesionDlg" widgetVar="cerrandoSesionDlg" resizable="false" modal="true"
		width="50%" position="top" closable="false"
		onShow="sessionController.showingClosingDialog('btnInvalidaSesion', 'spanTiempo')">
		<f:facet name="header">
			<h:outputText value="#{messages['sesion.cerrando.titulo']}" />
		</f:facet>
		<h:form id="formCerrandoSession" prependId="false">
			<p:remoteCommand name="refrescaSesion" action="#{org.jboss.seam.web.session.isInvalid}" global="false" /> 
			<p:outputLabel> #{messages['sesion.cerrando.texto']}
			<span id="spanTiempo"></span>
			</p:outputLabel>
			<div class="ui-dialog-buttonpane">
				<p:commandButton process="@this" value="#{messages['sesion.continuar']}" global="false"
					onclick="sessionController.continuedSession();refrescaSesion();return false;"
					styleClass="btn btn-primary" />
				<p:commandButton id="btnInvalidaSesion" process="@this" action="#{org.jboss.seam.web.session.invalidate}"
					value="#{messages['sesion.cerrar']}" onstart="sessionController.finalizedSession();" 
					oncomplete="PF('cerrandoSesionDlg').hide();PF('noSesionDlg').show();"
					styleClass="btn btn-secondary" />
			</div>
		</h:form>
	</p:dialog>
 

Se puede adaptar el dialogo a nuestra aplicación pero manteniendo el widgetVar=“cerrandoSesionDlg”, las llamadas a sessionController y los identificadores que se incluyen en estas llamadas.

Se espera que el dialogo actual de sesión cerrada siga llamandose igual widgetVar=“noSesionDlg”.

Se valor “#{seamComponentsProperties['duracion.sesion.miliseg']}” obtiene el tiempo de sesión de las propiedades de Componentents, podemos cambiarlo si lo obtenemos de otra forma.

Es posible que en tu aplicación la llamada action=“#{org.jboss.seam.web.session.isInvalid}” den problemas, en tal caso sustitúyelas por llamadas a un bean de tu aplicación que no haga nada action=“#{miBean.accionVacia}”.

Añadir sessiontimer.js al proyecto

Añadir sessiontimer.js en src/main/webapp/resources/js/

Funcionamiento por defecto:

  • Se establece 25 minutos de tiempo de sesión, se puede cambiar añadiendo la propiedad duracion.sesion.segs en filtro-???.properties, cualquier llamada ajax reinicia este tiempo.
  • Pasados 10 minutos desde la última llamada ajax las pulsaciones de teclas o clicks de ratón envían una petición ajax transparente para el usuario, reiniciando la sesión.
  • Tras 25 minutos sin ninguna petición ajax se muestra un dialogo con una cuenta atras de 2 minutos y dos botones para continuar o terminar la sesión.
  • fdw2.0/fundeweb2.0/gt/sessiontimer_script.txt
  • Última modificación: 19/01/2021 10:27
  • por MARIANO Array