modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
| 17 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
| 107 +++++++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
| 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/TrackingRemoteServiceProxy.java
| 1
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/authentication/SessionAccessServlet.java
| 24 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
| 5
6 files changed, 134 insertions(+), 30 deletions(-)
New commits:
commit dea3ebef4e4e58af479d4701cd71ad04c63e34d8
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Feb 4 17:14:15 2011 -0500
some refactoring and more documentation.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index 2dd12d6..4da58e2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -52,6 +52,20 @@ import
org.rhq.enterprise.gui.coregui.client.util.preferences.UserPreferences;
* Else check server-side logged in state
* If logged out on server-side, LoginView will be shown, which sets local loggedIn
bit to false.
*
+ * Additionally, all login checks go through checkLoginStatus where the following
happens
+ *
+ * 1)HTTP Get request sent to portal.war SessionAccessServlet which when logged in:
+ * yes)logged in returns (Subject.id):(Server side session id):(Last Accessed time)
+ * no )empty text and Login screen displayed
+ *
+ * 2)If logged in there are two flavors of Subject logins that will occur
+ * a)Regular RHQ logins and case sensitive LDAP users with established RHQ accounts:
Subject.id > 0
+ * b)LDAP users i)registering new user ii)Existing but case-insensitive ldap username
used : Subject.id == 0
+ *
+ * Case a) is trivial and well understood. With case b) the credentials are used to
retrieve or create RHQ Subject
+ * instances by terminating previous sessions and creating new ones to be used with
all future client
+ * side UI requests. In case b) the WebUser is updated appropriately.
+ *
* @author Joseph Marques
* @author Jay Shaughnessy
* @author Simeon Pinder
@@ -237,15 +251,16 @@ public class UserSessionManager {
}
//pipe through method to handle case insensitive
- public void onSuccess(PageList<Subject>
results) {
- if (results.size() == 0) {//no case insensitive
matches found, launch registration
+ public void onSuccess(PageList<Subject>
subjects) {
+ //no case insensitive matches found, launch
registration
+ if (subjects.size() == 0) {
Log.trace("Proceeding with registration
for ldap user '" + user + "'.");
sessionState = State.IS_REGISTERING;
new
LoginView(LOCATOR_ID).showRegistrationDialog(subject.getName(),
sessionId, password, callback);
return;
} else {//launch case sensitive code handling
- final Subject locatedSubject =
results.get(0);
+ final Subject locatedSubject =
subjects.get(0);
Log
.trace("Checked credentials and
determined that ldap case insensitive login '"
+ locatedSubject.getName()
@@ -268,7 +283,6 @@ public class UserSessionManager {
public void onSuccess(final Subject
checked) {
Log.trace("Proceeding with
case sensitive login of ldap user '"
+ user +
"'.");
-
callback.onSuccess(checked);
return;
}
@@ -321,11 +335,8 @@ public class UserSessionManager {
}
});
- // reset the session subject to the latest, for
wrapping in user preferences
- sessionSubject = validSessionSubject;
- userPreferences = new
UserPreferences(sessionSubject);
- //calling refresh here will set State to
IS_LOGGED_IN
- refresh();
+ //indicate success to 'login' Callback
+ callback.onSuccess(validSessionSubject);
}
});
}//end of server side session check;
@@ -353,29 +364,29 @@ public class UserSessionManager {
/** Takes an updated Subject and signals SessionAccessServlet in portal.war to update
the associated WebUser
* because for this specific authenticated user. Currently assumes Subject
instances returned from SubjectManagerBean.processSubjectForLdap.
*
- * @param checked Subject with updated session
+ * @param loggedInSubject Subject with updated session
*/
- private static void scheduleWebUserUpdate(final Subject checked) {
+ private static void scheduleWebUserUpdate(final Subject loggedInSubject) {
final RequestBuilder b = new RequestBuilder(RequestBuilder.GET,
"/sessionAccess");
//add header to signal SessionAccessServlet to update the WebUser for the
successfully logged in user
- b.setHeader(WEB_USER_UPDATE, String.valueOf(checked.getSessionId()));
+ b.setHeader(WEB_USER_UPDATE, String.valueOf(loggedInSubject.getSessionId()));
try {
b.setCallback(new RequestCallback() {
public void onResponseReceived(final Request request, final Response
response) {
Log.trace("Successfully submitted request to update server side
WebUser for subject '"
- + checked.getName() + "'.");
+ + loggedInSubject.getName() + "'.");
}
@Override
public void onError(Request request, Throwable exception) {
Log.trace("Failed to submit request to update server side
WebUser for subject '"
- + checked.getName() + "'."
+ + loggedInSubject.getName() + "'."
+ ((exception != null ? exception.getMessage() : " Exception
ref null.")));
}
});
b.send();
} catch (RequestException e) {
- Log.trace("Failure submitting update request for WebUser '" +
checked.getName() + "'."
+ Log.trace("Failure submitting update request for WebUser '" +
loggedInSubject.getName() + "'."
+ (e != null ? e.getMessage() : "RequestException reference is
null."));
}
}
commit d0701a76dd6093333e9658876a432cebb84a7fea
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Feb 4 13:30:44 2011 -0500
i)Fixed BZ: 662073 via modifying sessionAccessServlet to additionally update
WebUser.
ii)Fixed new user registration configuration issue.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index e8e6958..2240f77 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -469,6 +469,7 @@ public class LoginView extends LocatableCanvas {
Log.trace("Succesfully registered the new ldap
Subject.");
window.destroy();
loginShowing = false;
+ //indicate to login callback success
callback.onSuccess(checked);
}
});
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index ed7c24d..2dd12d6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -54,6 +54,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.preferences.UserPreferences;
*
* @author Joseph Marques
* @author Jay Shaughnessy
+ * @author Simeon Pinder
*/
public class UserSessionManager {
private static final Messages MSG = CoreGUI.getMessages();
@@ -66,6 +67,8 @@ public class UserSessionManager {
// The web session scheduled to be logged out on the server side
private static final String DOOMED_SESSION_NAME = "RHQ_DoomedSession";
+ // header identifier for triggering updating portal war webUser
+ private static final String WEB_USER_UPDATE = "rhq_webuser_update";
private static final String LOCATOR_ID = "SessionManagerLogin";
private static Subject sessionSubject;
@@ -266,12 +269,10 @@ public class UserSessionManager {
Log.trace("Proceeding with
case sensitive login of ldap user '"
+ user +
"'.");
- sessionState =
State.IS_LOGGED_IN;
- userPreferences = new
UserPreferences(checked);
- refresh();
callback.onSuccess(checked);
return;
}
+
});//end processSubjectForLdap call
}//end of case insensitive processing
}
@@ -349,6 +350,36 @@ public class UserSessionManager {
}
}
+ /** Takes an updated Subject and signals SessionAccessServlet in portal.war to update
the associated WebUser
+ * because for this specific authenticated user. Currently assumes Subject
instances returned from SubjectManagerBean.processSubjectForLdap.
+ *
+ * @param checked Subject with updated session
+ */
+ private static void scheduleWebUserUpdate(final Subject checked) {
+ final RequestBuilder b = new RequestBuilder(RequestBuilder.GET,
"/sessionAccess");
+ //add header to signal SessionAccessServlet to update the WebUser for the
successfully logged in user
+ b.setHeader(WEB_USER_UPDATE, String.valueOf(checked.getSessionId()));
+ try {
+ b.setCallback(new RequestCallback() {
+ public void onResponseReceived(final Request request, final Response
response) {
+ Log.trace("Successfully submitted request to update server side
WebUser for subject '"
+ + checked.getName() + "'.");
+ }
+
+ @Override
+ public void onError(Request request, Throwable exception) {
+ Log.trace("Failed to submit request to update server side
WebUser for subject '"
+ + checked.getName() + "'."
+ + ((exception != null ? exception.getMessage() : " Exception
ref null.")));
+ }
+ });
+ b.send();
+ } catch (RequestException e) {
+ Log.trace("Failure submitting update request for WebUser '" +
checked.getName() + "'."
+ + (e != null ? e.getMessage() : "RequestException reference is
null."));
+ }
+ }
+
public static void login() {
login(null, null);
}
@@ -361,12 +392,30 @@ public class UserSessionManager {
public static void login(String user, String password) {
checkLoginStatus(user, password, new AsyncCallback<Subject>() {
- public void onSuccess(final Subject result) {
+ public void onSuccess(final Subject loggedInSubject) {
// will build UI if necessary, then fires history event
sessionState = State.IS_LOGGED_IN;
+ int storedSessionSubjectId = -1;
+ if (sessionSubject != null) {
+ sessionSubject.getId();
+ }
+
//update the sessionSubject appropriately
- sessionSubject = result;
+ sessionSubject = loggedInSubject;
+ sessionState = State.IS_LOGGED_IN;
+ userPreferences = new UserPreferences(loggedInSubject);
+ refresh();
+
+ //conditionally update session information and server side WebUser when
updated.
+ if ((sessionSubject != null) && (loggedInSubject.getId() !=
storedSessionSubjectId)) {
+ //update the sessionSubject appropriately
+ sessionSubject = loggedInSubject;
+ //update the sessionId
+
saveSessionId(String.valueOf(loggedInSubject.getSessionId().intValue()));
+ //Update the portal war WebUser now that we've updated
subject+session
+ scheduleWebUserUpdate(loggedInSubject);
+ }
CoreGUI.get().buildCoreUI();
}
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/authentication/SessionAccessServlet.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/authentication/SessionAccessServlet.java
index 037e6b9..7c388b1 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/authentication/SessionAccessServlet.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/authentication/SessionAccessServlet.java
@@ -63,13 +63,37 @@ public class SessionAccessServlet extends HttpServlet {
//if a session does not already exist this call will create one
HttpSession session = request.getSession();
+ //check for web user update request from coregui
+ String sessionWebUserUpdate = request.getHeader("rhq_webuser_update");
+
/*
* check if the user object is in the session. if not, then the user is not
validated, the response output
* will not contain the
"<subjectId>:<sessionId>:<lastAccess>", which will forward the
user to the login page
*/
WebUser webUser = SessionUtils.getWebUser(session);
+
if (webUser != null && webUser.getSubject() != null) {
+ //if sessionWebUserUpdate header sent then request for WebUser to be updated
+ if ((sessionWebUserUpdate != null) &&
(!sessionWebUserUpdate.trim().isEmpty())) {
+ //if webUser.getSubject.getName is same as user with session id passed
in
+ try {
+ //attempt to retrieve Subject for the requested session update
+ Subject currentSubject = SessionManager.getInstance().getSubject(
+ Integer.valueOf(sessionWebUserUpdate));
+ if (currentSubject != null) {//located associated subject
+ //if userNames match(case insensitive) then update webUser
appropriately and re-associate in session
+ if
(webUser.getSubject().getName().equalsIgnoreCase(currentSubject.getName())) {
+ webUser = new WebUser(currentSubject);
+ SessionUtils.setWebUser(session, webUser);
+ }
+ }
+ } catch (SessionNotFoundException snfe) {
+ } catch (NumberFormatException e) {
+ } catch (SessionTimeoutException e) {
+ }
+ }
+
// the web user exists, so update our SessionManager's session
last-access-time
Subject subject = webUser.getSubject();
try {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index 1941085..aa657ad 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -168,7 +168,7 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
}
if (authorizationManager.isSystemSuperuser(subjectToModify) &&
!subjectToModify.getFactive()) {
throw new PermissionException("You cannot disable system user [" +
subjectToModify.getName()
- + "] - it must always be active.");
+ + "] - it must always be active.");
}
// Reset the roles, LDAP roles, and owned groups according to the current
settings as this method will not
@@ -501,6 +501,9 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
// new subject in order to do it with his own credentials
logout(subject.getSessionId().intValue());
subject = login(subject.getName(), subjectPassword);
+ //insert empty configuration to start
+ Configuration newUserConfig = new Configuration();
+ subject.setUserConfiguration(newUserConfig);
}
// //either way need to refresh the
WebUser
// if ((request != null) &&
(request.getSession() != null)) {
commit 611daf5a547b08ed3b452c9c951e30c114b555b0
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Thu Feb 3 13:47:16 2011 -0500
fix for blank dash with case insensitive login and a few other cosmetic fixes.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index cc50eb8..e8e6958 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -258,6 +258,7 @@ public class LoginView extends LocatableCanvas {
IButton okButton = new
LocatableIButton(inputForm.extendLocatorId("OK"), MSG.common_button_ok());
okButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
+
//F5 refresh check? If they've reloaded the form for some reason
then bail.
boolean credentialsEmpty = ((user == null) || (user.trim().isEmpty())
|| (password == null) || (password
.trim().isEmpty()));
@@ -271,12 +272,17 @@ public class LoginView extends LocatableCanvas {
if (inputForm.validate()) {
Log.trace("Successfully validated all data for user
registration.");
//populate form
- inputForm.setValue(FIRST, String.valueOf(first.getValue()));
- inputForm.setValue(LAST, String.valueOf(last.getValue()));
+ if (first.getValue() != null)
+ inputForm.setValue(FIRST, String.valueOf(first.getValue()));
+ if (last.getValue() != null)
+ inputForm.setValue(LAST, String.valueOf(last.getValue()));
inputForm.setValue(USERNAME,
String.valueOf(username.getValue()));
- inputForm.setValue(EMAIL, String.valueOf(email.getValue()));
- inputForm.setValue(PHONE, String.valueOf(phone.getValue()));
- inputForm.setValue(DEPARTMENT,
String.valueOf(department.getValue()));
+ if (email.getValue() != null)
+ inputForm.setValue(EMAIL, String.valueOf(email.getValue()));
+ if (phone.getValue() != null)
+ inputForm.setValue(PHONE, String.valueOf(phone.getValue()));
+ if (department.getValue() != null)
+ inputForm.setValue(DEPARTMENT,
String.valueOf(department.getValue()));
inputForm.setValue(SESSIONID, sessionId);
inputForm.setValue(PASSWORD, password);
registerLdapUser(LoginView.this.extendLocatorId("RegisterLdap"), inputForm,
callback);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index b345cff..ed7c24d 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -102,7 +102,8 @@ public class UserSessionManager {
public static void checkLoginStatus(final String user, final String password, final
AsyncCallback<Subject> callback) {
BrowserUtility.forceIe6Hacks();
-
+ //initiate request to portal.war(SessionAccessServlet) to retrieve existing
session info if exists
+ //session has valid user then
<subjectId>:<sessionId>:<lastAccess> else ""
final RequestBuilder b = new RequestBuilder(RequestBuilder.GET,
"/sessionAccess");
try {
b.setCallback(new RequestCallback() {
@@ -212,7 +213,6 @@ public class UserSessionManager {
new LoginView(LOCATOR_ID).showLoginDialog();
return;
}
-
// BZ-586435: insert case insensitivity for usernames with
ldap auth
// locate first matching subject and attach.
SubjectCriteria subjectCriteria = new SubjectCriteria();
@@ -242,7 +242,7 @@ public class UserSessionManager {
sessionId, password, callback);
return;
} else {//launch case sensitive code handling
- Subject locatedSubject = results.get(0);
+ final Subject locatedSubject =
results.get(0);
Log
.trace("Checked credentials and
determined that ldap case insensitive login '"
+ locatedSubject.getName()
@@ -251,6 +251,7 @@ public class UserSessionManager {
+ "'");
//use the original username to pass session
check.
subject.setName(user);
+
GWTServiceLookup.getSubjectService().processSubjectForLdap(subject,
password, new
AsyncCallback<Subject>() {
public void onFailure(Throwable
caught) {
@@ -261,23 +262,22 @@ public class UserSessionManager {
return;
}
- public void onSuccess(Subject
checked) {
- Log.trace("Proceeding with
registration for ldap user '" + user
- + "'.");
+ public void onSuccess(final Subject
checked) {
+ Log.trace("Proceeding with
case sensitive login of ldap user '"
+ + user +
"'.");
+
sessionState =
State.IS_LOGGED_IN;
userPreferences = new
UserPreferences(checked);
refresh();
-
callback.onSuccess(checked);
return;
}
});//end processSubjectForLdap call
- }
+ }//end of case insensitive processing
}
});//end findSubjectsByCriteria
} else {//else send through regular session check
-
SubjectCriteria criteria = new SubjectCriteria();
criteria.fetchConfiguration(true);
criteria.addFilterId(subjectId);
@@ -308,12 +308,14 @@ public class UserSessionManager {
Log.warn("Errors occurred
processing subject for LDAP."
+ caught.getMessage());
//TODO: pass informative message to
Login UI.
+
callback.onSuccess(validSessionSubject);
return;
}
public void onSuccess(Subject result) {
Log.trace("Succesfully processed
subject '"
+ validSessionSubject.getName() +
"' for LDAP.");
+
callback.onSuccess(validSessionSubject);
return;
}
});
@@ -321,15 +323,13 @@ public class UserSessionManager {
// reset the session subject to the latest, for
wrapping in user preferences
sessionSubject = validSessionSubject;
userPreferences = new
UserPreferences(sessionSubject);
+ //calling refresh here will set State to
IS_LOGGED_IN
refresh();
- sessionState = State.IS_LOGGED_IN;
- callback.onSuccess(validSessionSubject);
- return;
}
});
}//end of server side session check;
- } else {
+ } else {
//invalid client session. Back to login
sessionState = State.IS_LOGGED_OUT;
new LoginView(LOCATOR_ID).showLoginDialog();
@@ -361,10 +361,13 @@ public class UserSessionManager {
public static void login(String user, String password) {
checkLoginStatus(user, password, new AsyncCallback<Subject>() {
- public void onSuccess(Subject result) {
+ public void onSuccess(final Subject result) {
// will build UI if necessary, then fires history event
sessionState = State.IS_LOGGED_IN;
+ //update the sessionSubject appropriately
+ sessionSubject = result;
+
CoreGUI.get().buildCoreUI();
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
index 5a19688..55cacda 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
@@ -288,7 +288,10 @@ public class DashboardView extends LocatableVLayout {
Integer[] refreshValues = { STOP_VALUE, REFRESH1_VALUE, REFRESH5_VALUE,
REFRESH10_VALUE };
refreshMenuMappings = new HashMap<Integer, String>();
refreshMenuItems = new MenuItem[refreshIntervals.length];
- int retrievedRefreshInterval =
UserSessionManager.getUserPreferences().getPageRefreshInterval();
+ int retrievedRefreshInterval = REFRESH1_VALUE;
+ if (null != UserSessionManager.getUserPreferences()) {
+ retrievedRefreshInterval =
UserSessionManager.getUserPreferences().getPageRefreshInterval();
+ }
for (int i = 0; i < refreshIntervals.length; i++) {
MenuItem item = new MenuItem(refreshIntervals[i], "");
item.addClickHandler(menuClick);
@@ -587,7 +590,10 @@ public class DashboardView extends LocatableVLayout {
public void updateRefreshMenu() {
if (refreshMenuItems != null) {
- int retrievedRefreshInterval =
UserSessionManager.getUserPreferences().getPageRefreshInterval();
+ int retrievedRefreshInterval = REFRESH1_VALUE;
+ if (null != UserSessionManager.getUserPreferences()) {
+ retrievedRefreshInterval =
UserSessionManager.getUserPreferences().getPageRefreshInterval();
+ }
String currentSelection = refreshMenuMappings.get(retrievedRefreshInterval);
if (currentSelection != null) {//iterate over menu items and update icon
details
for (int i = 0; i < refreshMenuItems.length; i++) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/TrackingRemoteServiceProxy.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/TrackingRemoteServiceProxy.java
index b361fb9..165ae4e 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/TrackingRemoteServiceProxy.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/TrackingRemoteServiceProxy.java
@@ -53,6 +53,7 @@ public class TrackingRemoteServiceProxy extends RemoteServiceProxy {
private static final Set<String> bypassMethods = new HashSet<String>();
static {
bypassMethods.add("SubjectGWTService_Proxy.findSubjectsByCriteria");
+ bypassMethods.add("SubjectGWTService_Proxy.processSubjectForLdap");
bypassMethods.add("SubjectGWTService_Proxy.logout");
}