package com.mossle.security.util;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.mossle.api.userauth.UserAuthDTO;
import com.mossle.core.auth.LogoutEvent;
import com.mossle.spi.userauth.InternalUserAuthConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class LogoutHttpSessionListener implements HttpSessionListener {
private static Logger logger = LoggerFactory
.getLogger(LogoutHttpSessionListener.class);
private InternalUserAuthConnector internalUserAuthConnector;
public void sessionCreated(HttpSessionEvent se) {
}
public void sessionDestroyed(HttpSessionEvent se) {
ApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(se.getSession().getServletContext());
if (ctx == null) {
logger.warn("cannot find applicationContext");
return;
}
HttpSession session = se.getSession();
UserAuthDTO userAuthDto = this.internalUserAuthConnector
.findFromSession(session);
String tenantId = null;
if (userAuthDto != null) {
tenantId = userAuthDto.getTenantId();
}
LogoutEvent logoutEvent = new LogoutEvent(session, null,
session.getId(), tenantId);
ctx.publishEvent(logoutEvent);
}
@Resource
public void setInternalUserAuthConnector(
InternalUserAuthConnector internalUserAuthConnector) {
this.internalUserAuthConnector = internalUserAuthConnector;
}
}