Limit czasu za pomocą idlemonitora (primefaces)

Próbuję obsługiwać limit czasu sesji za pośrednictwemidlemonitor, komponent primefaces.

Robię to, ponieważ muszę poinformować użytkownika, że ​​z powodu braku aktywności sesja wygasła. Muszę wyświetlić tę wiadomość przez okno dialogowe, po zamknięciu okna dialogowego powinien zostać przekierowany do strony logowania. Nie powinien być w stanie kliknąć „wstecz” i przeglądać aplikacji, tak jak nic się nie dzieje; jeśli kliknie „z powrotem”, powinien zostać przekierowany na stronę sessionexpired.xhtml.

WłożyłemidleMonitor w moimloggedintemplate.xhtml, więc działa tylko wtedy, gdy jesteś zalogowany, bez względu na stronę, ponieważ wszystkie moje strony po zalogowaniu pochodzą zloggedintemplate.xhtml.

W ten sposób kod w moimloggedintemplate.xhtml wygląda jak:

<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>

Tak więc funkcjonalność tego kodu zasadniczo sprawdza, czy użytkownik był nieaktywny przez 6 sekund, jeśli był nieaktywny, pojawi się okno dialogowe nieodblokowujące i poinformuje go, że sesja wygasła.

MetodaloginController.timeout () powinien wylogować użytkownika, unieważnić sesję itp.

Moim problemem jest to, że nie wiem, jak unieważnić sesję, jak wylogować użytkownika itp. Jeśli używamFacesContext.getCurrentInstance().getExternalContext() .invalidateSession(); unieważnia sesję, ale potrzebuję więcej. Na przykład, jeśli użytkownik jest nieaktywny przez ponad 30 minut, domyślny czas oczekiwania JavaEE, otrzymuję wyjątek nullPointerException.

Chcę obsługiwać limit czasu „ręcznie”, czy istnieje sposób na wyłączenie domyślnego limitu czasu JavaEE?

Jaki jest najlepszy sposób ręcznego obsłużenia limitu czasu, a nie w ten sposób:

<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>

questionAnswers(1)

yourAnswerToTheQuestion