Provides core user information.
Implementations are not used directly by Acegi Security for security purposes. They simply store user information which is later encapsulated into {@link Authentication} objects. This allows non-security related userinformation (such as email addresses, telephone numbers etc) to be stored in a convenient location.
Concrete implementations must take particular care to ensure the non-null contract detailed for each method is enforced. See {@link org.acegisecurity.userdetails.User} for areference implementation (which you might like to extend).
Concrete implementations should be immutable (value object semantics, like a String). This is because the UserDetails
will be stored in caches and as such multiple threads may use the same instance.
@author Ben Alex
@version $Id: UserDetails.java 1784 2007-02-24 21:00:24Z luke_t $