com.atlassian.crowd.service.cache
Class CachingUserManager

java.lang.Object
  extended by com.atlassian.crowd.service.cache.CachingUserManager
All Implemented Interfaces:
UserManager

public class CachingUserManager
extends Object
implements UserManager


Constructor Summary
CachingUserManager(SecurityServerClient securityServerClient, BasicCache basicCache)
           
 
Method Summary
 void addAllUsers(Collection<SOAPPrincipalWithCredential> users)
          Adds all users to Crowd.
 SOAPPrincipal addUser(SOAPPrincipal user, PasswordCredential credential)
          Adds a user to Crowd.
 List getAllUserNames()
          This optimises the background getAllUserNames() call.
 SOAPPrincipal getUser(String userName)
          Given a userName, fetches the user's details, either from cache or from the Crowd server.
 SOAPPrincipal getUserFromToken(String token)
          Note: the lookup is not currently cached - it will always hit the server.
 SOAPPrincipal getUserWithAttributes(String userName)
          Given a userName, fetches the user's details and their associated attributes, either from cache or from the Crowd server.
 boolean isUser(String userName)
          With JIRA we're guaranteed that if there are any names in the user list, all the names are in the user list.
 void removeUser(String userName)
          Removes a user from Crowd.
 List searchUsers(SearchRestriction[] restrictions)
          Searches the list of all available users based on the passed-in restrictions and returns a list of users that match.
 void updatePassword(String userName, PasswordCredential credential)
          Changes the password for the user specified by userName.
 void updateUser(SOAPPrincipal user)
          Updates a user's details in Crowd.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CachingUserManager

public CachingUserManager(SecurityServerClient securityServerClient,
                          BasicCache basicCache)
Method Detail

getUser

public SOAPPrincipal getUser(String userName)
                      throws RemoteException,
                             InvalidAuthorizationTokenException,
                             UserNotFoundException,
                             InvalidAuthenticationException
Description copied from interface: UserManager
Given a userName, fetches the user's details, either from cache or from the Crowd server.

Specified by:
getUser in interface UserManager
Parameters:
userName - The user's identifier
Returns:
An object representing the user
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
UserNotFoundException - Could not find the user.
InvalidAuthenticationException - if the application name/password combination is invalid

getUserWithAttributes

public SOAPPrincipal getUserWithAttributes(String userName)
                                    throws RemoteException,
                                           InvalidAuthorizationTokenException,
                                           UserNotFoundException,
                                           InvalidAuthenticationException
Description copied from interface: UserManager
Given a userName, fetches the user's details and their associated attributes, either from cache or from the Crowd server.

Specified by:
getUserWithAttributes in interface UserManager
Parameters:
userName - The user's identifier
Returns:
An object representing the user and their attributes
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
UserNotFoundException - Could not find the user.
InvalidAuthenticationException - if the application name/password combination is invalid

getUserFromToken

public SOAPPrincipal getUserFromToken(String token)
                               throws RemoteException,
                                      InvalidAuthorizationTokenException,
                                      InvalidTokenException,
                                      InvalidAuthenticationException
Note: the lookup is not currently cached - it will always hit the server. The returned user is cached and will by found by a call to getUser()

Specified by:
getUserFromToken in interface UserManager
Parameters:
token - The token presented by the client browser to the webserver.
Returns:
An object representing the user
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidTokenException - The token presented was not a valid Crowd token.
InvalidAuthenticationException - if the application name/password combination is invalid

searchUsers

public List searchUsers(SearchRestriction[] restrictions)
                 throws RemoteException,
                        InvalidAuthorizationTokenException,
                        InvalidAuthenticationException
Description copied from interface: UserManager
Searches the list of all available users based on the passed-in restrictions and returns a list of users that match.

Specified by:
searchUsers in interface UserManager
Parameters:
restrictions - search restrictions
Returns:
A List of SOAPPrincipals that match the criteria.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidAuthenticationException - if the application name/password combination is invalid

addUser

public SOAPPrincipal addUser(SOAPPrincipal user,
                             PasswordCredential credential)
                      throws RemoteException,
                             ApplicationPermissionException,
                             InvalidCredentialException,
                             InvalidUserException,
                             InvalidAuthorizationTokenException,
                             InvalidAuthenticationException
Description copied from interface: UserManager
Adds a user to Crowd.

Specified by:
addUser in interface UserManager
Parameters:
user - The user to add to Crowd
credential - The credential (eg. password) for the user. May be null.
Returns:
The SOAPPrincipal, as returned by the Crowd server.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
ApplicationPermissionException - The application does not have rights to add users.
InvalidCredentialException - The credentials were malformed or did not meet directory complexity requirements.
InvalidUserException - The user was malformed or already exists.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidAuthenticationException - if the application name/password combination is invalid

addAllUsers

public void addAllUsers(Collection<SOAPPrincipalWithCredential> users)
                 throws InvalidAuthorizationTokenException,
                        BulkAddFailedException,
                        RemoteException,
                        ApplicationPermissionException,
                        InvalidAuthenticationException
Description copied from interface: UserManager
Adds all users to Crowd. N.B.: After adding the users the cache gets flushed.

Specified by:
addAllUsers in interface UserManager
Parameters:
users - The users to add to Crowd
Throws:
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
BulkAddFailedException - Thrown if it failed to create a user in of the directories.
RemoteException - A communication error occurred - the Crowd server may not be available.
ApplicationPermissionException - The application does not have rights to add users.
InvalidAuthenticationException - if the application name/password combination is invalid

updateUser

public void updateUser(SOAPPrincipal user)
                throws RemoteException,
                       ApplicationPermissionException,
                       InvalidAuthorizationTokenException,
                       UserNotFoundException,
                       InvalidAuthenticationException
Description copied from interface: UserManager
Updates a user's details in Crowd.

Specified by:
updateUser in interface UserManager
Parameters:
user - The user to update
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
ApplicationPermissionException - This application does not have the rights to update the user.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
UserNotFoundException - The user to update could not be found.
InvalidAuthenticationException - if the application name/password combination is invalid

updatePassword

public void updatePassword(String userName,
                           PasswordCredential credential)
                    throws RemoteException,
                           InvalidAuthorizationTokenException,
                           InvalidCredentialException,
                           ApplicationPermissionException,
                           UserNotFoundException,
                           InvalidAuthenticationException
Description copied from interface: UserManager
Changes the password for the user specified by userName.

Specified by:
updatePassword in interface UserManager
Parameters:
userName - The identifier of the user
credential - The new credentials for the user.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidCredentialException - The credentials were malformed or did not meet directory complexity requirements.
ApplicationPermissionException - This application does not have the rights to update the user's password.
UserNotFoundException - The user could not be found in any directory mapped to this application.
InvalidAuthenticationException - if the application name/password combination is invalid

removeUser

public void removeUser(String userName)
                throws RemoteException,
                       InvalidAuthorizationTokenException,
                       ApplicationPermissionException,
                       UserNotFoundException,
                       InvalidAuthenticationException
Description copied from interface: UserManager
Removes a user from Crowd.

Specified by:
removeUser in interface UserManager
Parameters:
userName - The name of the user to remove.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
ApplicationPermissionException - This application is not allowed to remove this user.
UserNotFoundException - The user to remove could not be found.
InvalidAuthenticationException - if the application name/password combination is invalid

getAllUserNames

public List getAllUserNames()
                     throws RemoteException,
                            InvalidAuthorizationTokenException,
                            InvalidAuthenticationException
This optimises the background getAllUserNames() call. JIRA goes "give me all the usernames", followed by "give me each user, individually". This is slow because we scan the directory once for the list of usernames, then once again for each user.

The optimisation reduces the number of directory scans to one. A huge benefit, particularly with Active Directory.

Specified by:
getAllUserNames in interface UserManager
Returns:
A List of Strings that list all the users visible to this application.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidAuthenticationException - if the application name/password combination is invalid

isUser

public boolean isUser(String userName)
               throws RemoteException,
                      InvalidAuthorizationTokenException,
                      InvalidAuthenticationException
With JIRA we're guaranteed that if there are any names in the user list, all the names are in the user list. We go to the user cache because a map lookup should be much faster than using contains() on a List, because it's implemented as a straight iterative search.

Specified by:
isUser in interface UserManager
Parameters:
userName - name of the user
Returns:
true if the user is valid, false otherwise.
Throws:
RemoteException - A communication error occurred - the Crowd server may not be available.
InvalidAuthorizationTokenException - The application (not the user) was not authenticated correctly.
InvalidAuthenticationException - if the application name/password combination is invalid


Copyright © 2012 Atlassian. All Rights Reserved.