Index: lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r7342460aa103c2f8ecd74a5ddfacbaad6b483f5c --- lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java (.../UniversalLoginModule.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java (.../UniversalLoginModule.java) (revision 7342460aa103c2f8ecd74a5ddfacbaad6b483f5c) @@ -85,7 +85,7 @@ private char[] credential; private static String dsJndiName; - private static final Map internalAuthenticationTokens = new TreeMap(); + private static final Map internalAuthenticationTokens = new TreeMap<>(); private static DatabaseAuthenticator databaseAuthenticator; private static IThemeService themeService; @@ -296,20 +296,25 @@ return false; } + boolean isValid = false; + // check for internal authentication made by LoginRequestServlet or LoginAsAction if (inputPassword.startsWith("#LAMS")) { if (UniversalLoginModule.log.isDebugEnabled()) { UniversalLoginModule.log.debug("Authenticating internally user: " + userName); } + Long internalAuthenticationTime = UniversalLoginModule.internalAuthenticationTokens.get(inputPassword); - UniversalLoginModule.internalAuthenticationTokens.remove(inputPassword); + // internal authentication is valid for 10 seconds - return (internalAuthenticationTime != null) && ((System.currentTimeMillis() + isValid = (internalAuthenticationTime != null) && ((System.currentTimeMillis() - internalAuthenticationTime) < UniversalLoginModule.INTERNAL_AUTHENTICATION_TIMEOUT); + if (!isValid) { + UniversalLoginModule.internalAuthenticationTokens.remove(inputPassword); + } + return isValid; } - boolean isValid = false; - try { User user = UniversalLoginModule.userManagementService.getUserByLogin(userName); // LDAP user provisioning @@ -419,7 +424,7 @@ */ private Group[] getRoleSets() throws LoginException { String userName = getUserName(); - Map setsMap = new HashMap(); + Map setsMap = new HashMap<>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; @@ -438,7 +443,7 @@ throw new FailedLoginException("No matching user name found in roles: " + userName); } - ArrayList groupMembers = new ArrayList(); + ArrayList groupMembers = new ArrayList<>(); do { String name = rs.getString(1); String groupName = rs.getString(2); Index: lams_central/web/login.jsp =================================================================== diff -u -r14414dbc33c3338acb9b1ac26bb20aa7b4b8f19c -r7342460aa103c2f8ecd74a5ddfacbaad6b483f5c --- lams_central/web/login.jsp (.../login.jsp) (revision 14414dbc33c3338acb9b1ac26bb20aa7b4b8f19c) +++ lams_central/web/login.jsp (.../login.jsp) (revision 7342460aa103c2f8ecd74a5ddfacbaad6b483f5c) @@ -192,9 +192,8 @@ UserDTO userDTO = (UserDTO) hs.getAttribute("user"); if (userDTO != null) { // remove session from mapping - SessionManager.removeSessionByLogin(userDTO.getLogin(), false); + SessionManager.removeSessionByLogin(userDTO.getLogin(), true); } - hs.invalidate(); } %>