SEC-107: Rename AuthenticationDao to UserDetailsService.

This commit is contained in:
Ben Alex 2005-11-29 13:10:15 +00:00
parent c021362ebb
commit a6e23d79ae
81 changed files with 464 additions and 422 deletions

View File

@ -17,8 +17,8 @@ package org.acegisecurity.acl.basic;
import org.acegisecurity.Authentication;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.UserDetails;
import org.acegisecurity.acl.AclEntry;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -16,8 +16,8 @@
package org.acegisecurity.concurrent;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.ui.WebAuthenticationDetails;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.util.Assert;

View File

@ -16,7 +16,7 @@
package org.acegisecurity.event.authentication;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -16,7 +16,7 @@
package org.acegisecurity.providers;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -42,7 +42,7 @@ import org.acegisecurity.event.authentication.AuthenticationFailureServiceExcept
import org.acegisecurity.event.authentication.AuthenticationSuccessEvent;
import org.acegisecurity.providers.cas.ProxyUntrustedException;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -17,7 +17,7 @@ package org.acegisecurity.providers.anonymous;
import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.providers.dao.memory.UserAttribute;
import org.acegisecurity.userdetails.memory.UserAttribute;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -18,12 +18,12 @@ package org.acegisecurity.providers.cas;
import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.ui.cas.CasProcessingFilter;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -16,8 +16,8 @@
package org.acegisecurity.providers.cas;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AbstractAuthenticationToken;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.util.Assert;

View File

@ -16,7 +16,7 @@
package org.acegisecurity.providers.cas;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -16,16 +16,16 @@
package org.acegisecurity.providers.cas.populator;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.cas.CasAuthoritiesPopulator;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
/**
* Populates the CAS authorities via an {@link AuthenticationDao}.
* Populates the CAS authorities via an {@link UserDetailsService}.
*
* <P>
* The additional information (username, password, enabled status etc) an
@ -41,15 +41,15 @@ public class DaoCasAuthoritiesPopulator implements CasAuthoritiesPopulator,
InitializingBean {
//~ Instance fields ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
//~ Methods ================================================================
public void setAuthenticationDao(AuthenticationDao authenticationDao) {
public void setAuthenticationDao(UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}
public AuthenticationDao getAuthenticationDao() {
public UserDetailsService getAuthenticationDao() {
return authenticationDao;
}

View File

@ -21,11 +21,12 @@ import org.acegisecurity.AuthenticationException;
import org.acegisecurity.CredentialsExpiredException;
import org.acegisecurity.DisabledException;
import org.acegisecurity.LockedException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.cache.NullUserCache;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;
@ -38,7 +39,7 @@ import org.springframework.util.Assert;
/**
* A base {@link AuthenticationProvider} that allows subclasses to override and
* work with {@link org.acegisecurity.UserDetails} objects. The class is
* work with {@link org.acegisecurity.userdetails.UserDetails} objects. The class is
* designed to respond to {@link UsernamePasswordAuthenticationToken}
* authentication requests.
*
@ -63,8 +64,8 @@ import org.springframework.util.Assert;
* Caching is handled via the <code>UserDetails</code> object being placed in
* the {@link UserCache}. This ensures that subsequent requests with the same
* username can be validated without needing to query the {@link
* AuthenticationDao}. It should be noted that if a user appears to present an
* incorrect password, the {@link AuthenticationDao} will be queried to
* UserDetailsService}. It should be noted that if a user appears to present an
* incorrect password, the {@link UserDetailsService} will be queried to
* confirm the most up-to-date password was used for comparison.
* </p>
*/

View File

@ -18,12 +18,14 @@ package org.acegisecurity.providers.dao;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.AuthenticationServiceException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.encoding.PasswordEncoder;
import org.acegisecurity.providers.encoding.PlaintextPasswordEncoder;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
@ -32,13 +34,13 @@ import org.springframework.util.Assert;
/**
* An {@link AuthenticationProvider} implementation that retrieves user details
* from an {@link AuthenticationDao}.
* from an {@link UserDetailsService}.
*/
public class DaoAuthenticationProvider
extends AbstractUserDetailsAuthenticationProvider {
//~ Instance fields ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
private PasswordEncoder passwordEncoder = new PlaintextPasswordEncoder();
private SaltSource saltSource;
private boolean hideUserNotFoundExceptions = true;
@ -67,7 +69,7 @@ public class DaoAuthenticationProvider
"An Authentication DAO must be set");
}
public AuthenticationDao getAuthenticationDao() {
public UserDetailsService getAuthenticationDao() {
return authenticationDao;
}
@ -111,7 +113,7 @@ public class DaoAuthenticationProvider
return loadedUser;
}
public void setAuthenticationDao(AuthenticationDao authenticationDao) {
public void setAuthenticationDao(UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}

View File

@ -15,7 +15,7 @@
package org.acegisecurity.providers.dao;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -15,7 +15,8 @@
package org.acegisecurity.providers.dao;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -15,8 +15,8 @@
package org.acegisecurity.providers.dao.cache;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.userdetails.UserDetails;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;

View File

@ -15,8 +15,8 @@
package org.acegisecurity.providers.dao.cache;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -16,8 +16,8 @@
package org.acegisecurity.providers.dao.salt;
import org.acegisecurity.AuthenticationServiceException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.SaltSource;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;

View File

@ -15,8 +15,8 @@
package org.acegisecurity.providers.dao.salt;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.SaltSource;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;

View File

@ -16,7 +16,7 @@
package org.acegisecurity.providers.jaas;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
import java.io.IOException;

View File

@ -18,10 +18,10 @@ package org.acegisecurity.providers.x509;
import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.x509.cache.NullX509UserCache;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -15,8 +15,8 @@
package org.acegisecurity.providers.x509;
import org.acegisecurity.UserDetails;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.userdetails.UserDetails;
import java.security.cert.X509Certificate;

View File

@ -15,7 +15,7 @@
package org.acegisecurity.providers.x509;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
import java.security.cert.X509Certificate;

View File

@ -15,8 +15,8 @@
package org.acegisecurity.providers.x509.cache;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.x509.X509UserCache;
import org.acegisecurity.userdetails.UserDetails;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;

View File

@ -1,7 +1,7 @@
package org.acegisecurity.providers.x509.cache;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.x509.X509UserCache;
import org.acegisecurity.userdetails.UserDetails;
import java.security.cert.X509Certificate;

View File

@ -17,10 +17,10 @@ package org.acegisecurity.providers.x509.populator;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.x509.X509AuthoritiesPopulator;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -40,7 +40,7 @@ import java.security.cert.X509Certificate;
/**
* Populates the X509 authorities via an {@link
* org.acegisecurity.providers.dao.AuthenticationDao}.
* org.acegisecurity.userdetails.UserDetailsService}.
*/
public class DaoX509AuthoritiesPopulator implements X509AuthoritiesPopulator,
InitializingBean, MessageSourceAware {
@ -50,7 +50,7 @@ public class DaoX509AuthoritiesPopulator implements X509AuthoritiesPopulator,
//~ Instance fields ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
protected MessageSourceAccessor messages;
private Pattern subjectDNPattern;
private String subjectDNRegex = "CN=(.*?),";
@ -97,7 +97,7 @@ public class DaoX509AuthoritiesPopulator implements X509AuthoritiesPopulator,
return this.authenticationDao.loadUserByUsername(userName);
}
public void setAuthenticationDao(AuthenticationDao authenticationDao) {
public void setAuthenticationDao(UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}

View File

@ -57,7 +57,7 @@ import java.util.Vector;
* use when using preexisting role names without a prefix, and no ability
* exists to prefix them with a role prefix on reading them in, such as
* provided for example in {@link
* org.acegisecurity.providers.dao.jdbc.JdbcDaoImpl}.
* org.acegisecurity.userdetails.jdbc.JdbcDaoImpl}.
* </p>
*
* @author Ben Alex

View File

@ -16,10 +16,10 @@
package org.acegisecurity.taglibs.authz;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import java.io.IOException;

View File

@ -18,18 +18,18 @@ package org.acegisecurity.ui.digestauth;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.AuthenticationServiceException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.providers.dao.cache.NullUserCache;
import org.acegisecurity.ui.WebAuthenticationDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.util.StringSplitUtils;
import org.apache.commons.codec.binary.Base64;
@ -120,7 +120,7 @@ public class DigestProcessingFilter implements Filter, InitializingBean,
//~ Instance fields ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
private DigestProcessingFilterEntryPoint authenticationEntryPoint;
protected MessageSourceAccessor messages;
private UserCache userCache = new NullUserCache();
@ -460,7 +460,7 @@ public class DigestProcessingFilter implements Filter, InitializingBean,
return digestMd5;
}
public AuthenticationDao getAuthenticationDao() {
public UserDetailsService getAuthenticationDao() {
return authenticationDao;
}
@ -474,7 +474,7 @@ public class DigestProcessingFilter implements Filter, InitializingBean,
public void init(FilterConfig ignored) throws ServletException {}
public void setAuthenticationDao(AuthenticationDao authenticationDao) {
public void setAuthenticationDao(UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}

View File

@ -16,10 +16,10 @@
package org.acegisecurity.ui.rememberme;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.providers.rememberme.RememberMeAuthenticationToken;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
@ -57,10 +57,10 @@ import javax.servlet.http.HttpServletResponse;
* </p>
*
* <p>
* An {@link org.acegisecurity.providers.dao.AuthenticationDao} is required
* An {@link org.acegisecurity.userdetails.UserDetailsService} is required
* by this implementation, so that it can construct a valid
* <code>Authentication</code> from the returned {@link
* org.acegisecurity.UserDetails}. This is also necessary so that the
* org.acegisecurity.userdetails.UserDetails}. This is also necessary so that the
* user's password is available and can be checked as part of the encoded
* cookie.
* </p>
@ -112,18 +112,18 @@ public class TokenBasedRememberMeServices implements RememberMeServices,
//~ Instance fields ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
private String key;
private String parameter = DEFAULT_PARAMETER;
private long tokenValiditySeconds = 1209600; // 14 days
//~ Methods ================================================================
public void setAuthenticationDao(AuthenticationDao authenticationDao) {
public void setAuthenticationDao(UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}
public AuthenticationDao getAuthenticationDao() {
public UserDetailsService getAuthenticationDao() {
return authenticationDao;
}

View File

@ -23,17 +23,17 @@ import org.acegisecurity.CredentialsExpiredException;
import org.acegisecurity.DisabledException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.LockedException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.event.authentication.AuthenticationSwitchUserEvent;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.ui.WebAuthenticationDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -131,7 +131,7 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean,
// ~ Instance fields
// ========================================================
private AuthenticationDao authenticationDao;
private UserDetailsService authenticationDao;
protected MessageSourceAccessor messages;
private String exitUserUrl = "/j_acegi_exit_user";
private String switchUserUrl = "/j_acegi_switch_user";
@ -492,7 +492,7 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean,
* authentication dao
*/
public void setAuthenticationDao(
AuthenticationDao authenticationDao) {
UserDetailsService authenticationDao) {
this.authenticationDao = authenticationDao;
}

View File

@ -13,230 +13,261 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao;
package org.acegisecurity.userdetails;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
import org.springframework.util.Assert;
/**
* Models core user information retieved by an {@link AuthenticationDao}.
* Models core user information retieved by an {@link UserDetailsService}.
*
* <P>
* Implemented with value object semantics (immutable after construction, like
* a <code>String</code>). Developers may use this class directly, subclass
* it, or write their own {@link UserDetails} implementation from scratch.
* Implemented with value object semantics (immutable after construction, like a
* <code>String</code>). Developers may use this class directly, subclass it,
* or write their own {@link UserDetails} implementation from scratch.
* </p>
*/
public class User implements UserDetails {
//~ Instance fields ========================================================
// ~ Instance fields
// ========================================================
private String password;
private String username;
private GrantedAuthority[] authorities;
private boolean accountNonExpired;
private boolean accountNonLocked;
private boolean credentialsNonExpired;
private boolean enabled;
private String password;
//~ Constructors ===========================================================
private String username;
protected User() {
throw new IllegalArgumentException("Cannot use default constructor");
}
private GrantedAuthority[] authorities;
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled set to <code>true</code> if the user is enabled
* @param authorities the authorities that should be granted to the caller
* if they presented the correct username and password and the user
* is enabled
*
* @throws IllegalArgumentException if a <code>null</code> value was passed
* either as a parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*
* @deprecated use new constructor with extended properties (this
* constructor will be removed from release 1.0.0)
*/
public User(String username, String password, boolean enabled,
GrantedAuthority[] authorities) throws IllegalArgumentException {
this(username, password, enabled, true, true, authorities);
}
private boolean accountNonExpired;
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled set to <code>true</code> if the user is enabled
* @param accountNonExpired set to <code>true</code> if the account has not
* expired
* @param credentialsNonExpired set to <code>true</code> if the credentials
* have not expired
* @param authorities the authorities that should be granted to the caller
* if they presented the correct username and password and the user
* is enabled
*
* @throws IllegalArgumentException if a <code>null</code> value was passed
* either as a parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*
* @deprecated use new constructor with extended properties (this
* constructor will be removed from release 1.0.0)
*/
public User(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
GrantedAuthority[] authorities) throws IllegalArgumentException {
this(username, password, enabled, accountNonExpired,
credentialsNonExpired, true, authorities);
}
private boolean accountNonLocked;
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled set to <code>true</code> if the user is enabled
* @param accountNonExpired set to <code>true</code> if the account has not
* expired
* @param credentialsNonExpired set to <code>true</code> if the credentials
* have not expired
* @param accountNonLocked set to <code>true</code> if the account is not
* locked
* @param authorities the authorities that should be granted to the caller
* if they presented the correct username and password and the user
* is enabled
*
* @throws IllegalArgumentException if a <code>null</code> value was passed
* either as a parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*/
public User(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked, GrantedAuthority[] authorities)
throws IllegalArgumentException {
if (((username == null) || "".equals(username)) || (password == null)) {
throw new IllegalArgumentException(
"Cannot pass null or empty values to constructor");
}
private boolean credentialsNonExpired;
this.username = username;
this.password = password;
this.enabled = enabled;
this.accountNonExpired = accountNonExpired;
this.credentialsNonExpired = credentialsNonExpired;
this.accountNonLocked = accountNonLocked;
setAuthorities(authorities);
}
private boolean enabled;
//~ Methods ================================================================
// ~ Constructors
// ===========================================================
public boolean equals(Object rhs) {
if (!(rhs instanceof User) || (rhs == null)) {
return false;
}
protected User() {
throw new IllegalArgumentException("Cannot use default constructor");
}
User user = (User) rhs;
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username
* the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password
* the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled
* set to <code>true</code> if the user is enabled
* @param authorities
* the authorities that should be granted to the caller if they
* presented the correct username and password and the user is
* enabled
*
* @throws IllegalArgumentException
* if a <code>null</code> value was passed either as a
* parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*
* @deprecated use new constructor with extended properties (this
* constructor will be removed from release 1.0.0)
*/
public User(String username, String password, boolean enabled,
GrantedAuthority[] authorities) throws IllegalArgumentException {
this(username, password, enabled, true, true, authorities);
}
// We rely on constructor to guarantee any User has non-null and >0 authorities
if (user.getAuthorities().length != this.getAuthorities().length) {
return false;
}
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username
* the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password
* the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled
* set to <code>true</code> if the user is enabled
* @param accountNonExpired
* set to <code>true</code> if the account has not expired
* @param credentialsNonExpired
* set to <code>true</code> if the credentials have not expired
* @param authorities
* the authorities that should be granted to the caller if they
* presented the correct username and password and the user is
* enabled
*
* @throws IllegalArgumentException
* if a <code>null</code> value was passed either as a
* parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*
* @deprecated use new constructor with extended properties (this
* constructor will be removed from release 1.0.0)
*/
public User(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
GrantedAuthority[] authorities) throws IllegalArgumentException {
this(username, password, enabled, accountNonExpired,
credentialsNonExpired, true, authorities);
}
for (int i = 0; i < this.getAuthorities().length; i++) {
if (!this.getAuthorities()[i].equals(user.getAuthorities()[i])) {
return false;
}
}
/**
* Construct the <code>User</code> with the details required by {@link
* DaoAuthenticationProvider}.
*
* @param username
* the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password
* the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled
* set to <code>true</code> if the user is enabled
* @param accountNonExpired
* set to <code>true</code> if the account has not expired
* @param credentialsNonExpired
* set to <code>true</code> if the credentials have not expired
* @param accountNonLocked
* set to <code>true</code> if the account is not locked
* @param authorities
* the authorities that should be granted to the caller if they
* presented the correct username and password and the user is
* enabled
*
* @throws IllegalArgumentException
* if a <code>null</code> value was passed either as a
* parameter or as an element in the
* <code>GrantedAuthority[]</code> array
*/
public User(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked, GrantedAuthority[] authorities)
throws IllegalArgumentException {
if (((username == null) || "".equals(username)) || (password == null)) {
throw new IllegalArgumentException(
"Cannot pass null or empty values to constructor");
}
// We rely on constructor to guarantee non-null username and password
return (this.getPassword().equals(user.getPassword())
&& this.getUsername().equals(user.getUsername())
&& (this.isAccountNonExpired() == user.isAccountNonExpired())
&& (this.isAccountNonLocked() == user.isAccountNonLocked())
&& (this.isCredentialsNonExpired() == user.isCredentialsNonExpired())
&& (this.isEnabled() == user.isEnabled()));
}
this.username = username;
this.password = password;
this.enabled = enabled;
this.accountNonExpired = accountNonExpired;
this.credentialsNonExpired = credentialsNonExpired;
this.accountNonLocked = accountNonLocked;
setAuthorities(authorities);
}
public GrantedAuthority[] getAuthorities() {
return authorities;
}
// ~ Methods
// ================================================================
public String getPassword() {
return password;
}
public boolean equals(Object rhs) {
if (!(rhs instanceof User) || (rhs == null)) {
return false;
}
public String getUsername() {
return username;
}
User user = (User) rhs;
public boolean isAccountNonExpired() {
return accountNonExpired;
}
// We rely on constructor to guarantee any User has non-null and >0
// authorities
if (user.getAuthorities().length != this.getAuthorities().length) {
return false;
}
public boolean isAccountNonLocked() {
return this.accountNonLocked;
}
for (int i = 0; i < this.getAuthorities().length; i++) {
if (!this.getAuthorities()[i].equals(user.getAuthorities()[i])) {
return false;
}
}
public boolean isCredentialsNonExpired() {
return credentialsNonExpired;
}
// We rely on constructor to guarantee non-null username and password
return (this.getPassword().equals(user.getPassword())
&& this.getUsername().equals(user.getUsername())
&& (this.isAccountNonExpired() == user.isAccountNonExpired())
&& (this.isAccountNonLocked() == user.isAccountNonLocked())
&& (this.isCredentialsNonExpired() == user
.isCredentialsNonExpired()) && (this.isEnabled() == user
.isEnabled()));
}
public boolean isEnabled() {
return enabled;
}
public GrantedAuthority[] getAuthorities() {
return authorities;
}
protected void setAuthorities(GrantedAuthority[] authorities) {
Assert.notNull(authorities, "Cannot pass a null GrantedAuthority array");
public String getPassword() {
return password;
}
for (int i = 0; i < authorities.length; i++) {
Assert.notNull(authorities[i],
"Granted authority element " + i
+ " is null - GrantedAuthority[] cannot contain any null elements");
}
public String getUsername() {
return username;
}
this.authorities = authorities;
}
public boolean isAccountNonExpired() {
return accountNonExpired;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(super.toString() + ": ");
sb.append("Username: " + this.username + "; ");
sb.append("Password: [PROTECTED]; ");
sb.append("Enabled: " + this.enabled + "; ");
sb.append("AccountNonExpired: " + this.accountNonExpired + "; ");
sb.append("credentialsNonExpired: " + this.credentialsNonExpired + "; ");
sb.append("AccountNonLocked: " + this.accountNonLocked + "; ");
public boolean isAccountNonLocked() {
return this.accountNonLocked;
}
if (this.getAuthorities() != null) {
sb.append("Granted Authorities: ");
public boolean isCredentialsNonExpired() {
return credentialsNonExpired;
}
for (int i = 0; i < this.getAuthorities().length; i++) {
if (i > 0) {
sb.append(", ");
}
public boolean isEnabled() {
return enabled;
}
sb.append(this.getAuthorities()[i].toString());
}
} else {
sb.append("Not granted any authorities");
}
protected void setAuthorities(GrantedAuthority[] authorities) {
Assert
.notNull(authorities,
"Cannot pass a null GrantedAuthority array");
return sb.toString();
}
for (int i = 0; i < authorities.length; i++) {
Assert
.notNull(
authorities[i],
"Granted authority element "
+ i
+ " is null - GrantedAuthority[] cannot contain any null elements");
}
this.authorities = authorities;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(super.toString() + ": ");
sb.append("Username: " + this.username + "; ");
sb.append("Password: [PROTECTED]; ");
sb.append("Enabled: " + this.enabled + "; ");
sb.append("AccountNonExpired: " + this.accountNonExpired + "; ");
sb
.append("credentialsNonExpired: " + this.credentialsNonExpired
+ "; ");
sb.append("AccountNonLocked: " + this.accountNonLocked + "; ");
if (this.getAuthorities() != null) {
sb.append("Granted Authorities: ");
for (int i = 0; i < this.getAuthorities().length; i++) {
if (i > 0) {
sb.append(", ");
}
sb.append(this.getAuthorities()[i].toString());
}
} else {
sb.append("Not granted any authorities");
}
return sb.toString();
}
}

View File

@ -13,10 +13,13 @@
* limitations under the License.
*/
package org.acegisecurity;
package org.acegisecurity.userdetails;
import java.io.Serializable;
import org.acegisecurity.Authentication;
import org.acegisecurity.GrantedAuthority;
/**
* Provides core user information.

View File

@ -13,10 +13,9 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao;
import org.acegisecurity.UserDetails;
package org.acegisecurity.userdetails;
import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
import org.springframework.dao.DataAccessException;
@ -32,7 +31,7 @@ import org.springframework.dao.DataAccessException;
* @author Ben Alex
* @version $Id$
*/
public interface AuthenticationDao {
public interface UserDetailsService {
//~ Methods ================================================================
/**

View File

@ -13,13 +13,13 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao;
package org.acegisecurity.userdetails;
import org.acegisecurity.BadCredentialsException;
/**
* Thrown if an {@link AuthenticationDao} implementation cannot locate a {@link
* Thrown if an {@link UserDetailsService} implementation cannot locate a {@link
* User} by its username.
*
* @author Ben Alex

View File

@ -13,34 +13,29 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.jdbc;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContextException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
package org.acegisecurity.userdetails.jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import javax.sql.DataSource;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContextException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
/**
* <p>
@ -70,7 +65,7 @@ import javax.sql.DataSource;
* @author colin sampaleanu
* @version $Id$
*/
public class JdbcDaoImpl extends JdbcDaoSupport implements AuthenticationDao {
public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
//~ Static fields/initializers =============================================
public static final String DEF_USERS_BY_USERNAME_QUERY = "SELECT username,password,enabled FROM users WHERE username = ?";

View File

@ -13,20 +13,17 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException;
import org.springframework.util.Assert;
package org.acegisecurity.userdetails.memory;
import java.util.Properties;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException;
import org.springframework.util.Assert;
/**
* Retrieves user details from an in-memory list created by the bean context.
@ -34,7 +31,7 @@ import java.util.Properties;
* @author Ben Alex
* @version $Id$
*/
public class InMemoryDaoImpl implements AuthenticationDao, InitializingBean {
public class InMemoryDaoImpl implements UserDetailsService, InitializingBean {
//~ Instance fields ========================================================
private UserMap userMap;

View File

@ -13,14 +13,14 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
package org.acegisecurity.userdetails.memory;
import java.util.List;
import java.util.Vector;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
/**
* Used by {@link InMemoryDaoImpl} to temporarily store the attributes

View File

@ -13,14 +13,13 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
import org.acegisecurity.GrantedAuthorityImpl;
import org.springframework.util.StringUtils;
package org.acegisecurity.userdetails.memory;
import java.beans.PropertyEditorSupport;
import org.acegisecurity.GrantedAuthorityImpl;
import org.springframework.util.StringUtils;
/**
* Property editor that creates a {@link UserAttribute} from a comma separated

View File

@ -13,19 +13,18 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert;
package org.acegisecurity.userdetails.memory;
import java.util.HashMap;
import java.util.Map;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert;
/**
* Used by {@link InMemoryDaoImpl} to store a list of users and their

View File

@ -13,18 +13,16 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.springframework.beans.propertyeditors.PropertiesEditor;
package org.acegisecurity.userdetails.memory;
import java.beans.PropertyEditorSupport;
import java.util.Iterator;
import java.util.Properties;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.propertyeditors.PropertiesEditor;
/**
* Property editor to assist with the setup of a {@link UserMap}.

View File

@ -49,7 +49,7 @@ import java.util.Iterator;
* some use when using preexisting role names without a prefix, and no ability
* exists to prefix them with a role prefix on reading them in, such as
* provided for example in {@link
* org.acegisecurity.providers.dao.jdbc.JdbcDaoImpl}.
* org.acegisecurity.userdetails.jdbc.JdbcDaoImpl}.
* </p>
*
* <p>

View File

@ -18,8 +18,8 @@ package org.acegisecurity.wrapper;
import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationTrustResolver;
import org.acegisecurity.AuthenticationTrustResolverImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import java.security.Principal;

View File

@ -21,7 +21,7 @@ import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.acl.AclEntry;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
/**

View File

@ -23,7 +23,7 @@ import org.acegisecurity.MockFilterConfig;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.context.SecurityContextImpl;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.dao.memory.UserAttribute;
import org.acegisecurity.userdetails.memory.UserAttribute;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

View File

@ -22,12 +22,12 @@ import org.acegisecurity.AuthenticationException;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.cas.ticketvalidator.AbstractTicketValidator;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.ui.cas.CasProcessingFilter;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.context.support.StaticMessageSource;
import java.util.HashMap;

View File

@ -19,9 +19,9 @@ import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import java.util.List;
import java.util.Vector;

View File

@ -21,7 +21,7 @@ import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.MockApplicationContext;
import org.acegisecurity.providers.cas.CasAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import net.sf.ehcache.Cache;

View File

@ -19,10 +19,10 @@ import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;
@ -111,7 +111,7 @@ public class DaoCasAuthoritiesPopulatorTests extends TestCase {
public void testGettersSetters() {
DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
AuthenticationDao dao = new MockAuthenticationDaoUserMarissa();
UserDetailsService dao = new MockAuthenticationDaoUserMarissa();
populator.setAuthenticationDao(dao);
assertEquals(dao, populator.getAuthenticationDao());
}
@ -119,7 +119,7 @@ public class DaoCasAuthoritiesPopulatorTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDaoSimulateBackendError
implements AuthenticationDao {
implements UserDetailsService {
public long getRefreshDuration() {
return 0;
}
@ -131,7 +131,7 @@ public class DaoCasAuthoritiesPopulatorTests extends TestCase {
}
}
private class MockAuthenticationDaoUserMarissa implements AuthenticationDao {
private class MockAuthenticationDaoUserMarissa implements UserDetailsService {
public long getRefreshDuration() {
return 0;
}

View File

@ -26,13 +26,16 @@ import org.acegisecurity.DisabledException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.LockedException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache;
import org.acegisecurity.providers.dao.cache.NullUserCache;
import org.acegisecurity.providers.dao.salt.SystemWideSaltSource;
import org.acegisecurity.providers.encoding.ShaPasswordEncoder;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.context.support.StaticMessageSource;
import org.springframework.dao.DataAccessException;
@ -461,7 +464,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
public void testStartupSuccess() throws Exception {
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setMessageSource(new StaticMessageSource());
AuthenticationDao dao = new MockAuthenticationDaoUserMarissa();
UserDetailsService dao = new MockAuthenticationDaoUserMarissa();
provider.setAuthenticationDao(dao);
provider.setUserCache(new MockUserCache());
assertEquals(dao, provider.getAuthenticationDao());
@ -478,7 +481,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDaoReturnsNull implements AuthenticationDao {
private class MockAuthenticationDaoReturnsNull implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
return null;
@ -486,7 +489,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
private class MockAuthenticationDaoSimulateBackendError
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
throw new DataRetrievalFailureException(
@ -494,7 +497,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
}
private class MockAuthenticationDaoUserMarissa implements AuthenticationDao {
private class MockAuthenticationDaoUserMarissa implements UserDetailsService {
private String password = "koala";
public void setPassword(String password) {
@ -515,7 +518,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
private class MockAuthenticationDaoUserMarissaWithSalt
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("marissa".equals(username)) {
@ -530,7 +533,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
}
private class MockAuthenticationDaoUserPeter implements AuthenticationDao {
private class MockAuthenticationDaoUserPeter implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("peter".equals(username)) {
@ -545,7 +548,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
private class MockAuthenticationDaoUserPeterAccountExpired
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("peter".equals(username)) {
@ -560,7 +563,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
private class MockAuthenticationDaoUserPeterAccountLocked
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("peter".equals(username)) {
@ -575,7 +578,7 @@ public class DaoAuthenticationProviderTests extends TestCase {
}
private class MockAuthenticationDaoUserPeterCredentialsExpired
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("peter".equals(username)) {

View File

@ -20,7 +20,7 @@ import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.MockApplicationContext;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import net.sf.ehcache.Cache;

View File

@ -19,7 +19,7 @@ import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
/**

View File

@ -20,8 +20,8 @@ import junit.framework.TestCase;
import org.acegisecurity.AuthenticationServiceException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -19,7 +19,8 @@ import junit.framework.TestCase;
import org.acegisecurity.*;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.context.support.StaticMessageSource;
import java.security.cert.X509Certificate;

View File

@ -20,9 +20,9 @@ import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.MockApplicationContext;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.x509.X509TestUtils;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import net.sf.ehcache.Cache;

View File

@ -20,11 +20,11 @@ import junit.framework.TestCase;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.providers.x509.X509TestUtils;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.context.support.StaticMessageSource;
import org.springframework.dao.DataAccessException;
@ -139,7 +139,7 @@ public class DaoX509AuthoritiesPopulatorTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDaoMatchesNameOrEmail
implements AuthenticationDao {
implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
if ("Luke Taylor".equals(username)

View File

@ -21,7 +21,7 @@ import org.acegisecurity.Authentication;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;

View File

@ -20,9 +20,9 @@ import junit.framework.TestCase;
import org.acegisecurity.MockAuthenticationEntryPoint;
import org.acegisecurity.MockAuthenticationManager;
import org.acegisecurity.MockFilterConfig;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.context.SecurityContextImpl;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.codec.binary.Base64;

View File

@ -19,15 +19,15 @@ import junit.framework.TestCase;
import org.acegisecurity.DisabledException;
import org.acegisecurity.MockFilterConfig;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.context.SecurityContextImpl;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.util.StringSplitUtils;
import org.apache.commons.codec.binary.Base64;
@ -855,7 +855,7 @@ public class DigestProcessingFilterTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDao implements AuthenticationDao {
private class MockAuthenticationDao implements UserDetailsService {
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
return null;

View File

@ -22,11 +22,11 @@ import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
@ -402,7 +402,7 @@ public class TokenBasedRememberMeServicesTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDao implements AuthenticationDao {
private class MockAuthenticationDao implements UserDetailsService {
private UserDetails toReturn;
private boolean throwException;

View File

@ -23,12 +23,12 @@ import org.acegisecurity.CredentialsExpiredException;
import org.acegisecurity.DisabledException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.AuthenticationDao;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.util.MockFilterChain;
import org.springframework.context.support.StaticMessageSource;
@ -383,7 +383,7 @@ public class SwitchUserProcessingFilterTests extends TestCase {
//~ Inner Classes ==========================================================
private class MockAuthenticationDaoUserJackLord implements AuthenticationDao {
private class MockAuthenticationDaoUserJackLord implements UserDetailsService {
private String password = "hawaii50";
public void setPassword(String password) {

View File

@ -13,13 +13,14 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao;
package org.acegisecurity.userdetails;
import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
/**

View File

@ -13,13 +13,14 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.jdbc;
package org.acegisecurity.userdetails.jdbc;
import junit.framework.TestCase;
import org.acegisecurity.PopulatedDatabase;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
import org.springframework.jdbc.object.MappingSqlQuery;

View File

@ -13,11 +13,14 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
package org.acegisecurity.userdetails.memory;
import junit.framework.TestCase;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.userdetails.memory.InMemoryDaoImpl;
import org.acegisecurity.userdetails.memory.UserMap;
import org.acegisecurity.userdetails.memory.UserMapEditor;
import java.util.Properties;

View File

@ -13,7 +13,10 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
package org.acegisecurity.userdetails.memory;
import org.acegisecurity.userdetails.memory.UserAttribute;
import org.acegisecurity.userdetails.memory.UserAttributeEditor;
import junit.framework.TestCase;

View File

@ -13,7 +13,10 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
package org.acegisecurity.userdetails.memory;
import org.acegisecurity.userdetails.memory.UserMap;
import org.acegisecurity.userdetails.memory.UserMapEditor;
import junit.framework.TestCase;

View File

@ -13,15 +13,16 @@
* limitations under the License.
*/
package org.acegisecurity.providers.dao.memory;
package org.acegisecurity.userdetails.memory;
import junit.framework.TestCase;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.userdetails.memory.UserMap;
/**

View File

@ -22,7 +22,7 @@ import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.wrapper.SecurityContextHolderAwareRequestWrapper;
import org.springframework.mock.web.MockHttpServletRequest;

View File

@ -22,7 +22,7 @@
<beans>
<!-- Data access object which stores authentication information -->
<bean id="inMemoryDaoImpl" class="org.acegisecurity.providers.dao.memory.InMemoryDaoImpl">
<bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
marissa=koala,ROLE_TELLER,ROLE_SUPERVISOR

View File

@ -22,7 +22,7 @@
<beans>
<!-- Data access object which stores authentication information -->
<bean id="inMemoryDaoImpl" class="org.acegisecurity.providers.dao.memory.InMemoryDaoImpl">
<bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
marissa=koala,ROLE_TELLER,ROLE_SUPERVISOR

View File

@ -26,7 +26,7 @@
<subtitle>Reference Documentation</subtitle>
<releaseinfo>1.0.0</releaseinfo>
<releaseinfo>1.0.0 RC 1</releaseinfo>
<authorgroup>
<author>
@ -1405,7 +1405,7 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
<para>For a class to be able to provide the
<literal>DaoAuthenticationProvider</literal> with access to an
authentication repository, it must implement the
<literal>AuthenticationDao</literal> interface:</para>
<literal>UserDetailsService</literal> interface:</para>
<para><programlisting>public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException;</programlisting></para>
@ -1414,8 +1414,9 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
information such as the username, password, granted authorities and
whether the user is enabled or disabled. A concrete implementation,
<literal>User</literal>, is also provided. Acegi Security users will
need to decide when writing their <literal>AuthenticationDao</literal>
what type of <literal>UserDetails</literal> to return. In most cases
need to decide when writing their
<literal>UserDetailsService</literal> what type of
<literal>UserDetails</literal> to return. In most cases
<literal>User</literal> will be used directly or subclassed, although
special circumstances (such as object relational mappers) may require
users to write their own <literal>UserDetails</literal> implementation
@ -1424,13 +1425,13 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
number and email address), so they can be easily used by web
views.</para>
<para>Given <literal>AuthenticationDao</literal> is so simple to
<para>Given <literal>UserDetailsService</literal> is so simple to
implement, it should be easy for users to retrieve authentication
information using a persistence strategy of their choice.</para>
<para>A design decision was made not to support account locking in the
<literal>DaoAuthenticationProvider</literal>, as doing so would have
increased the complexity of the <literal>AuthenticationDao</literal>
increased the complexity of the <literal>UserDetailsService</literal>
interface. For instance, a method would be required to increase the
count of unsuccessful authentication attempts. Such functionality
could be easily provided by leveraging the application event
@ -1441,7 +1442,7 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
<literal>principal</literal> property set. The principal will be
either a <literal>String</literal> (which is essentially the username)
or a <literal>UserDetails</literal> object (which was looked up from
the <literal>AuthenticationDao</literal>). By default the
the <literal>UserDetailsService</literal>). By default the
<literal>UserDetails</literal> is returned, as this enables
applications to add extra properties potentially of use in
applications, such as the user's full name, email address etc. If
@ -1458,7 +1459,7 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
<para>Whilst it is easy to use the
<literal>DaoAuthenticationProvider</literal> and create a custom
<literal>AuthenticationDao</literal> implementation that extracts
<literal>UserDetailsService</literal> implementation that extracts
information from a persistence engine of choice, many applications do
not require such complexity. One alternative is to configure an
authentication repository in the application context itself using the
@ -1769,7 +1770,7 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
system (<literal>Authentication</literal>,
<literal>AuthenticationManager</literal>,
<literal>AuthenticationProvider</literal> and
<literal>AuthenticationDao</literal>) it might be confusing to a new
<literal>UserDetailsService</literal>) it might be confusing to a new
user to know which part of the authentication system to customize. In
general, the following is recommended:</para>
@ -1785,8 +1786,8 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean {
repository (eg to obtain user details from your applications
existing database), use the
<literal>DaoAuthenticationProvider</literal> along with the
<literal>AuthenticationDao</literal>. It is the fastest and safest
way to integrate an external database.</para>
<literal>UserDetailsService</literal>. It is the fastest and
safest way to integrate an external database.</para>
</listitem>
<listitem>
@ -2732,7 +2733,7 @@ key: A private key to prevent modification of the nonce token
&lt;property name="nonceValiditySeconds"&gt;&lt;value&gt;10&lt;/value&gt;&lt;/property&gt;
&lt;/bean&gt;</programlisting></para>
<para>The configured <literal>AuthenticationDao</literal> is needed
<para>The configured <literal>UserDetailsService</literal> is needed
because <literal>DigestProcessingFilter</literal> must have direct
access to the clear text password of a user. Digest Authentication
will NOT work if you are using encoded passwords in your DAO. The DAO
@ -2928,10 +2929,10 @@ key: A private key to prevent modification of the remember-me token
by <literal>RememberMeAuthenticationProvider</literal>. A
<literal>key</literal> is shared between this authentication provider
and the <literal>TokenBasedRememberMeServices</literal>. In addition,
<literal>TokenBasedRememberMeServices</literal> requires an
<literal>AuthenticationDao</literal> from which it can retrieve the
username and password for signature comparison purposes, and generate
the <literal>RememberMeAuthenticationToken</literal> to contain the
<literal>TokenBasedRememberMeServices</literal> requires A
UserDetailsService from which it can retrieve the username and
password for signature comparison purposes, and generate the
<literal>RememberMeAuthenticationToken</literal> to contain the
correct <literal>GrantedAuthority</literal>[]s. Some sort of logout
command should be provided by the application (typically via a JSP)
that invalidates the cookie upon user request. See the Contacts Sample
@ -3634,12 +3635,12 @@ $CATALINA_HOME/bin/startup.sh</programlisting></para>
<literal>GrantedAuthority</literal> objects that apply to the user
contained in the <literal>TicketResponse</literal>. Acegi Security
includes a <literal>DaoCasAuthoritiesPopulator</literal> which
simply uses the <literal>AuthenticationDao</literal>
simply uses the <literal>UserDetailsService</literal>
infrastructure to find the <literal>UserDetails</literal> and
their associated <literal>GrantedAuthority</literal>s. Note that
the password and enabled/disabled status of
<literal>UserDetails</literal> returned by the
<literal>AuthenticationDao</literal> are ignored, as the CAS
<literal>UserDetailsService</literal> are ignored, as the CAS
server is responsible for authentication decisions.
<literal>DaoCasAuthoritiesPopulator</literal> is only concerned
with retrieving the <literal>GrantedAuthority</literal>s.</para>
@ -4086,9 +4087,8 @@ $CATALINA_HOME/bin/startup.sh</programlisting></para>
which extracts the user's name from the subject <quote>common
name</quote> (CN) in the certificate. It also allows you to set
your own regular expression to match a different part of the
subject's distinguished name. An
<classname>AuthenticationDao</classname> is used to load the
user information.<!-- TODO: Give email matching as an example --></para>
subject's distinguished name. A UserDetailsService is used to
load the user information.<!-- TODO: Give email matching as an example --></para>
</listitem>

View File

@ -17,7 +17,8 @@ applications:
<li>net.sf.acegisecurity.providers.dao.AuthenticationDao is now org.acegisecurity.userdetails.UserDetailsService.
The interface signature has not changed. Similarly, User and UserDetails have moved into the latter's package as well.
If you've implemented your own AuthenticationDao, you'll need to change the class it's implementing and quite likely
the import packages for User and UserDetails.</li>
the import packages for User and UserDetails. In addition, if using JdbcDaoImpl or InMemoryDaoImpl please
note they have moved to this new package.</li>
<li>Acegi Security is now localised. In net.sf.acegisecurity you will find a messages.properties. It is
suggested to register this in your application context, perhaps using ReloadableResourceBundleMessageSource.

View File

@ -5,12 +5,12 @@ import java.io.IOException;
import junit.framework.TestCase;
import org.acegisecurity.UserDetails;
import org.acegisecurity.intercept.web.FilterSecurityInterceptor;
import org.acegisecurity.intercept.web.SecurityEnforcementFilter;
import org.acegisecurity.providers.ProviderManager;
import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
import org.acegisecurity.providers.dao.memory.InMemoryDaoImpl;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.memory.InMemoryDaoImpl;
import org.acegisecurity.util.InMemoryResource;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;

View File

@ -19,13 +19,13 @@ import java.util.List;
import java.util.Random;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.acl.basic.AclObjectIdentity;
import org.acegisecurity.acl.basic.BasicAclExtendedDao;
import org.acegisecurity.acl.basic.NamedEntityObjectIdentity;
import org.acegisecurity.acl.basic.SimpleAclEntry;
import org.acegisecurity.annotation.Secured;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.support.ApplicationObjectSupport;

View File

@ -16,12 +16,12 @@
package sample.contact;
import org.acegisecurity.Authentication;
import org.acegisecurity.UserDetails;
import org.acegisecurity.acl.basic.AclObjectIdentity;
import org.acegisecurity.acl.basic.BasicAclExtendedDao;
import org.acegisecurity.acl.basic.NamedEntityObjectIdentity;
import org.acegisecurity.acl.basic.SimpleAclEntry;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;

View File

@ -14,8 +14,8 @@ import javax.naming.directory.InitialDirContext;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -16,7 +16,7 @@
package org.acegisecurity.providers.dao.ldap;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.dao.DataAccessException;

View File

@ -22,12 +22,12 @@ import org.acegisecurity.AuthenticationServiceException;
import org.acegisecurity.CredentialsExpiredException;
import org.acegisecurity.DisabledException;
import org.acegisecurity.LockedException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.AuthenticationProvider;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.providers.dao.cache.NullUserCache;
import org.acegisecurity.userdetails.UserDetails;
import org.springframework.beans.factory.InitializingBean;

View File

@ -18,9 +18,9 @@ import javax.naming.directory.SearchResult;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.ldap.PasswordAuthenticationDao;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -34,9 +34,9 @@ import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationTrustResolver;
import org.acegisecurity.AuthenticationTrustResolverImpl;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.UserDetails;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.intercept.web.SandboxSecurityEnforcementFilter;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.wrapper.redirect.Enumerator;
import org.acegisecurity.wrapper.redirect.FastHttpDateFormat;
import org.acegisecurity.wrapper.redirect.SavedHttpServletRequest;

View File

@ -16,8 +16,8 @@
package org.acegisecurity.providers.dao.ldap;
import org.acegisecurity.BadCredentialsException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase;
import org.acegisecurity.userdetails.UserDetails;
import javax.naming.NamingException;

View File

@ -28,14 +28,14 @@ import org.acegisecurity.DisabledException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.LockedException;
import org.acegisecurity.UserDetails;
import org.acegisecurity.providers.TestingAuthenticationToken;
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import org.acegisecurity.providers.dao.User;
import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.providers.dao.UsernameNotFoundException;
import org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache;
import org.acegisecurity.providers.dao.cache.NullUserCache;
import org.acegisecurity.userdetails.User;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;