package io.lumify.sql.web;
import io.lumify.sql.model.HibernateSessionManager;
import org.hibernate.SessionFactory;
import javax.servlet.*;
import java.io.IOException;
public class HibernateSessionManagementFilter implements Filter {
private static final String ALREADY_FILTERED = "HibernateSessionManagementFilter.filtered";
private final HibernateSessionManager sessionManager;
public HibernateSessionManagementFilter(HibernateSessionManager sessionManager) {
this.sessionManager = sessionManager;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// noop
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest.getAttribute(ALREADY_FILTERED) != null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
servletRequest.setAttribute(ALREADY_FILTERED, "true");
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
sessionManager.clearSession();
}
}
}
@Override
public void destroy() {
sessionManager.clearSession();
}
}