package org.akaza.openclinica.web.filter; import org.akaza.openclinica.bean.login.UserAccountBean; import org.akaza.openclinica.dao.hibernate.AuditUserLoginDao; import org.akaza.openclinica.dao.login.UserAccountDAO; import org.akaza.openclinica.domain.technicaladmin.AuditUserLoginBean; import org.akaza.openclinica.domain.technicaladmin.LoginStatus; import org.akaza.openclinica.i18n.util.ResourceBundleProvider; import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.session.SessionRegistryImpl; import org.springframework.security.core.userdetails.User; import javax.sql.DataSource; import java.util.Date; import java.util.Locale; public class OpenClinicaSessionRegistryImpl extends SessionRegistryImpl { AuditUserLoginDao auditUserLoginDao; UserAccountDAO userAccountDao; DataSource dataSource; @Override public void removeSessionInformation(String sessionId) { SessionInformation info = getSessionInformation(sessionId); if (info != null) { User u = (User) info.getPrincipal(); auditLogout(u.getUsername()); } super.removeSessionInformation(sessionId); } void auditLogout(String username) { ResourceBundleProvider.updateLocale(new Locale("en_US")); UserAccountBean userAccount = (UserAccountBean) getUserAccountDao().findByUserName(username); AuditUserLoginBean auditUserLogin = new AuditUserLoginBean(); auditUserLogin.setUserName(username); auditUserLogin.setLoginStatus(LoginStatus.SUCCESSFUL_LOGOUT); auditUserLogin.setLoginAttemptDate(new Date()); auditUserLogin.setUserAccountId(userAccount != null ? userAccount.getId() : null); getAuditUserLoginDao().saveOrUpdate(auditUserLogin); } public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public UserAccountDAO getUserAccountDao() { return userAccountDao != null ? userAccountDao : new UserAccountDAO(dataSource); } public AuditUserLoginDao getAuditUserLoginDao() { return auditUserLoginDao; } public void setAuditUserLoginDao(AuditUserLoginDao auditUserLoginDao) { this.auditUserLoginDao = auditUserLoginDao; } }