Index: lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java,v diff -u -r1.26 -r1.27 --- lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java 3 Dec 2014 20:38:11 -0000 1.26 +++ lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java 4 Aug 2015 20:56:00 -0000 1.27 @@ -145,17 +145,21 @@ } } Authenticator.authenticateLoginRequest(serverMap, timestamp, extUsername, method, lsId, hash); - + User user = userMap.getUser(); String login = user.getLogin(); // The "extUser" attribute works as a flag to indicate if the user has logged in String loginRequestUsername = (String) hses.getAttribute("extUser"); - if ((loginRequestUsername != null) && loginRequestUsername.equals(login)) { + // for checking if requested role is the same as already assigned + String role = method.equals(LoginRequestDispatcher.METHOD_LEARNER_STRICT_AUTHENTICATION) + ? LoginRequestDispatcher.METHOD_LEARNER : method; + role = role.toUpperCase(); + if ((loginRequestUsername != null) && loginRequestUsername.equals(login) && request.isUserInRole(role)) { String url = LoginRequestDispatcher.getRequestURL(request); response.sendRedirect(response.encodeRedirectURL(url)); return; - } else if (loginRequestUsername == null ? request.getRemoteUser() != null : !loginRequestUsername - .equals(login)) { + } else if (loginRequestUsername == null ? request.getRemoteUser() != null + : (!loginRequestUsername.equals(login) || !request.isUserInRole(role))) { hses = recreateSession(request, response); }