Index: lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java =================================================================== diff -u -rd9562e031bdfad9636e7ba4d47ae3b4417cd22f7 -r75095a124bc7ccd44570929b6d463c79e16f2df6 --- lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision d9562e031bdfad9636e7ba4d47ae3b4417cd22f7) +++ lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision 75095a124bc7ccd44570929b6d463c79e16f2df6) @@ -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); }