Sorry for late response... Here is our the class where the user is authenticated:
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.springframework.web.filter.OncePerRequestFilter;
import com.converge.framework.helper.ConnectionHelper;
import com.converge.framework.login.CnvgUser;
/**
* <p>The Class SessionTimeOutFilter validates the user's session.
* if user has timed out of session then it simply redirects it to
* log in page.</p>
*/
public class SessionTimeOutFilter extends OncePerRequestFilter {
/** The timeout page. */
private String
timeoutPage
= "login";
protected final Logger
logger
= LoggerFactory.getLogger(this.getClass());
/* (non-Javadoc)
* @see org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
*/
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
/* is session expire control required for this request? */
if (isSessionControlRequiredForThisResource(httpServletRequest)) {
/* is session invalid? */
if (isSessionInvalid(httpServletRequest)) {
String timeoutUrl = httpServletRequest.getContextPath() + "/secure/" + getTimeoutPage();
/*
* String forgotPasswordLink =
* httpServletRequest.getContextPath() +
* "/forgotPassword.faces";
*/
String redirect = timeoutUrl;
/*
* if(httpServletRequest.getRequestURI() != null &&
* httpServletRequest
* .getRequestURI().equalsIgnoreCase(forgotPasswordLink)){
* redirect = forgotPasswordLink; }
*/
logger.info("Session is invalid! redirecting to timeoutpage : " + redirect);
httpServletResponse.sendRedirect(redirect);
return;
}
}
}
try {
filterChain.doFilter(request, response);
} catch (Exception e) {
e.printStackTrace();
HttpServletRequest req = (HttpServletRequest) request;
CnvgUser user = (CnvgUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
try {
DriverManagerDataSource ds = ConnectionHelper.getTradeDataSource();
Connection conn = ds.getConnection();
Statement st = conn.createStatement();
st.executeUpdate("DELETE FROM NECXADM.APPLICATION_SESSIONS WHERE SESSION_ID = '" + req.getSession().getId().substring(0, req.getSession().getId().indexOf('.')) + "' AND LOGIN = '" + user.getUsername() + "'");
conn.close();
ds = null;
} catch (SQLException sqle) {
sqle.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw new org.springframework.beans.BeanInstantiationException(null, timeoutPage);
}
}
/**
* Checks if is session control required for this resource.
*
* @param httpServletRequest the http servlet request
* @return true, if is session control required for this resource
*/
private boolean isSessionControlRequiredForThisResource(HttpServletRequest httpServletRequest) {
String requestPath = httpServletRequest.getRequestURI();
String forgotPasswordLink = httpServletRequest.getContextPath() + "/secure/forgotpassword";
boolean controlRequired = (!StringUtils.contains(requestPath, getTimeoutPage()) && !StringUtils.contains(requestPath, forgotPasswordLink) && !StringUtils.contains(requestPath, "javax.faces.resource"));
return controlRequired;
}
/**
* Checks if is session invalid.
*
* @param httpServletRequest the http servlet request
* @return true, if is session invalid
*/
private boolean isSessionInvalid(HttpServletRequest httpServletRequest) {
SecurityContext context = (SecurityContext) httpServletRequest.getSession().getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
boolean sessionInValid;
if (context == null) {
sessionInValid = true;
} else {
sessionInValid = (httpServletRequest.getRequestedSessionId() != null) && !httpServletRequest.isRequestedSessionIdValid();
}
return sessionInValid;
}
/**
* Gets the timeout page.
*
* @return the timeout page
*/
public String getTimeoutPage() {
return timeoutPage;
}
/**
* Sets the timeout page.
*
* @param timeoutPage the new timeout page
*/
public void setTimeoutPage(String timeoutPage) {
this.timeoutPage = timeoutPage;
}
}
I hope this will help you to understand my issue.