I've got an existing Grails Web application that is in production and has a 30 minute session timeout. We are running Tomcat (tcServer).
When a user is authenticated and on certain pages I want to make some periodic polling ajax requests to the server that do not extend this 30 minute session timeout - so that our session timeout isn't thwarted.
The question is similar to this unanswered asp.net question, but none of the answers there will do and this in the Java/Tomcat realm.
How do I execute an authenticated AJAX request without resetting the tomcat's session timeout?
Is there some sort of filter or url-matching mechanism that I can use to exclude requests from extending the session timeout?
I'd go with a Grails filter that does something similar to what The-MeLLeR is proposing without the unnecessary loop through all sessions:
The session timeout should be dependency-injected or otherwise kept in sync with the value in web.xml.
There are two remaining issues. One is the case where there's an Ajax request but no previous non-Ajax request (lastAccess == null). The other is how to redirect the browser to a login page or wherever you need to go when there's an Ajax request after 30 minutes of no non-Ajax activity. You'd have to render JSON or some other response that the client would check to know that it's been timed out and do a client-side redirect.
Nope not possible...
One option is the following:
1) create a javax.servlet.Filter and store the timestamp of the last (non-ajax) pageview on the session.
2) create a javax.servlet.http.HttpSessionListener to store all the active sessions.
3) use a background thread to invalidate all expired sessions.
Sample Code: