When session times out, Session ID in HttpServletRequest
would become null
and hence it won't be able to fulfill its functionality.
You can implement a filter
(this adds some overhead for every click of yours on the page), to check if the session is still valid or not. If session is still valid then allow processing to carry on else redirect back to login page (or whatever).
Below is the code for filter
.
public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) throws IOException,ServletException
{
if((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse))
{
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
if (isSessionControlRequiredForThisResource(httpServletRequest)) {
// is session invalid?
if (isSessionInvalid(httpServletRequest)) {
String timeoutUrl = httpServletRequest.getContextPath() + "/" + getTimeOutPage();
httpServletResponse.sendRedirect(timeoutUrl);
return;
}
}
}
filterChain.doFilter(request, response);
}
private boolean isSessionControlRequiredForThisResource(HttpServletRequest httpServletRequest)
{
String requestPath = httpServletRequest.getRequestURI();
boolean controlRequired = !StringUtils.contains(requestPath, getTimeOutPage());
return controlRequired;
}
private boolean isSessionInvalid(HttpServletRequest httpServletRequest)
{
boolean sessionInValid = (httpServletRequest.getRequestedSessionId() != null)
&& !httpServletRequest.isRequestedSessionIdValid();
return sessionInValid;
}