Control de sesión con sessiontimer.js en FundeWeb
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
- En la etiqueta html, añadir, si no está, xmlns:fdw=“http://www.um.es/atica/fundeweb”.
- Dentro del head añadir la librería:
<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