Délai d'attente via idlemonitor (primefaces)

Je suis en train de gérer le délai d'expiration de session via idlemonitor, un primefaces composant.

Je le fais parce que j'ai besoin de laisser l'utilisateur de savoir que pour cause d'inactivité, la session a expiré. J'ai besoin d'afficher ce message à travers un dialogue, après il ferme la boîte de dialogue, il doit être redirigé vers le loginpage. Il ne devrait pas être en mesure de cliquer sur "retour" et de naviguer sur l'application de même que rien n'était; si il clique sur "retour", il devrait être redirigé vers une sessionexpired.page xhtml.

J'ai mis le idleMonitor dans mon loggedintemplate.xhtml, de sorte qu'il ne fonctionne que si vous êtes connecté, n'importe quelle page, dans la mesure où toutes mes pages, après vous être connecté, dérive de la loggedintemplate.xhtml.

C'est la façon dont le code dans mon loggedintemplate.xhtml ressemble:

<p:idleMonitor timeout="6000" onidle="idleDialog.show()" />

<p:dialog header="Timeout" resizable="false" closable="false" 
          widgetVar="idleDialog" modal="true">
    <p:panel styleClass="noborderpanel">
        <p:panelGrid columns="1" styleClass="adressegrid">
            <p:outputLabel value="Session has expired due to inactivity" />
                    <p:commandButton action="#{loginController.timeout()}"
                        value="Ok" />
        </p:panelGrid>
    </p:panel>
</p:dialog>

Donc la fonctionnalité de ce code, fondamentalement, vérifie si l'utilisateur est inactif pendant 6 secondes, s'il est inactif, les nations unies et fermer boîte de dialogue apparaît et lui dit que la session a expiré.

La méthode loginController.timeout() doit déconnecter un utilisateur, d'invalider la session etc.

Mon problème est que je ne sais pas comment faire pour invalider la session, comment déconnecter l'utilisateur etc. Si j'utilise FacesContext.getCurrentInstance().getExternalContext()
.invalidateSession();
il ne invalider la session, mais j'ai besoin de plus. Par exemple, si l'utilisateur est inactif pendant plus de 30 min, la valeur par défaut JavaEE délais d'attente, je reçois une nullPointerException.

Je veux gérer le délai d'attente "à la main", est-il un moyen de désactiver par défaut JavaEE délai d'attente?

Quelle est la meilleure façon de gérer le délai d'attente manuellement, pas comme ceci:

<session-config>
    <session-timeout>20</session-timeout>
</session-config>   
<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/expired.xhtml</location>
</error-page>
  • Je pense que vous pouvez améliorer vos chances de réponses, si vous formuler vos questions de manière plus spécifique. Je ne sais pas si vous pouvez désactiver la session-timeout dans le web.xml ensemble. Vous pouvez l'installer à 8 heures et ensuite invalider la session vous-même juste la façon dont vous le font déjà. Pour le NPE il suffit de cocher pour cela, alors. Nous utilisons ce exactement de cette manière (avec un primefaces idlemonitor).
  • Je ne comprends pas ce que tu veux dire par "ça alors"?
  • Où et quand exactement avez-vous obtenir le NPE? Lequel de ces FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); est null et à quelle heure? (Vérifier cela signifie: inclure un chèque comme if (objectThatCouldBeNull != null).
  • J'ai eu le NPE si l'utilisateur est inactif pendant plus de 20 min(délai d'expiration de session dans le web.xml) et cliqué sur le bouton OK de mon dialogue, qui a été généré si l'utilisateur est inactif pendant plus de 6 secondes(idlemonitor). Les NPE ont montré, parce que j'ai essayé d'appeler une méthode d'un bean, qui a déjà été invalidés(après 2o min). Je ne sais pas si je me suis fait assez clair, pour résumer: Si j'ai été inactif pendant 6 secondes, la boîte de dialogue s'affiche.Si je clique sur OK session est invalidé -> fonctionne très bien. Cependant, si je suis inactif depuis plus de 20 min, la séance est invalidé par défaut, si je reçois le NPE lors de la tentative d'invalider nouveau
InformationsquelleAutor leostiw | 2013-03-20