package ddth.dasp.servlet.listener; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ddth.dasp.common.DaspGlobal; import ddth.dasp.common.tempdir.TempDir; import ddth.dasp.common.utils.DaspConstants; /** * This {@link ServletContextListener} is responsible for initializing and * destroying the context's temp directory. * * @author NBThanh <btnguyen2k@gmail.com> */ public class DaspSessionListener implements HttpSessionListener { private Logger LOGGER = LoggerFactory.getLogger(DaspSessionListener.class); @Override public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); initTempDir(session); } @Override public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); destroyTempDir(session); } private void destroyTempDir(HttpSession session) { Object tmp = session.getAttribute(DaspConstants.SESSION_SESSION_TEMP_DIR); if (tmp instanceof TempDir) { try { ((TempDir) tmp).delete(); } catch (Throwable t) { LOGGER.warn(t.getMessage(), t); } } } private void initTempDir(HttpSession session) { TempDir contextTempDir = DaspGlobal.getContextTempDir(); String randomStr = "SESSION_" + RandomStringUtils.randomAlphanumeric(16); TempDir sessionTempDir = new TempDir(contextTempDir, randomStr); session.setAttribute(DaspConstants.SESSION_SESSION_TEMP_DIR, sessionTempDir); } }