|
@@ -51,6 +51,7 @@ import org.apache.commons.logging.LogFactory;
|
|
|
|
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
|
|
|
|
|
|
+import org.springframework.context.ApplicationEvent;
|
|
import org.springframework.context.ApplicationEventPublisher;
|
|
import org.springframework.context.ApplicationEventPublisher;
|
|
import org.springframework.context.ApplicationEventPublisherAware;
|
|
import org.springframework.context.ApplicationEventPublisherAware;
|
|
import org.springframework.context.MessageSource;
|
|
import org.springframework.context.MessageSource;
|
|
@@ -95,6 +96,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
//~ Static fields/initializers =====================================================================================
|
|
//~ Static fields/initializers =====================================================================================
|
|
|
|
|
|
private static final Log logger = LogFactory.getLog(ProviderManager.class);
|
|
private static final Log logger = LogFactory.getLog(ProviderManager.class);
|
|
|
|
+ private static final Properties DEFAULT_EXCEPTION_MAPPINGS = new Properties();
|
|
|
|
|
|
//~ Instance fields ================================================================================================
|
|
//~ Instance fields ================================================================================================
|
|
|
|
|
|
@@ -102,7 +104,28 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
private ConcurrentSessionController sessionController = new NullConcurrentSessionController();
|
|
private ConcurrentSessionController sessionController = new NullConcurrentSessionController();
|
|
private List providers;
|
|
private List providers;
|
|
protected MessageSourceAccessor messages = AcegiMessageSource.getAccessor();
|
|
protected MessageSourceAccessor messages = AcegiMessageSource.getAccessor();
|
|
- private Properties exceptionMappings;
|
|
|
|
|
|
+ private Properties exceptionMappings = new Properties();
|
|
|
|
+
|
|
|
|
+ static {
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(AccountExpiredException.class.getName(),
|
|
|
|
+ AuthenticationFailureExpiredEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(AuthenticationServiceException.class.getName(),
|
|
|
|
+ AuthenticationFailureServiceExceptionEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(LockedException.class.getName(), AuthenticationFailureLockedEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(CredentialsExpiredException.class.getName(),
|
|
|
|
+ AuthenticationFailureCredentialsExpiredEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(DisabledException.class.getName(), AuthenticationFailureDisabledEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(BadCredentialsException.class.getName(),
|
|
|
|
+ AuthenticationFailureBadCredentialsEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(UsernameNotFoundException.class.getName(),
|
|
|
|
+ AuthenticationFailureBadCredentialsEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(ConcurrentLoginException.class.getName(),
|
|
|
|
+ AuthenticationFailureConcurrentLoginEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(ProviderNotFoundException.class.getName(),
|
|
|
|
+ AuthenticationFailureProviderNotFoundEvent.class.getName());
|
|
|
|
+ DEFAULT_EXCEPTION_MAPPINGS.put(ProxyUntrustedException.class.getName(),
|
|
|
|
+ AuthenticationFailureProxyUntrustedEvent.class.getName());
|
|
|
|
+ }
|
|
|
|
|
|
//~ Methods ========================================================================================================
|
|
//~ Methods ========================================================================================================
|
|
|
|
|
|
@@ -111,26 +134,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
Assert.notNull(this.messages, "A message source must be set");
|
|
Assert.notNull(this.messages, "A message source must be set");
|
|
|
|
|
|
if (exceptionMappings == null) {
|
|
if (exceptionMappings == null) {
|
|
- exceptionMappings = new Properties();
|
|
|
|
- exceptionMappings.put(AccountExpiredException.class.getName(),
|
|
|
|
- AuthenticationFailureExpiredEvent.class.getName());
|
|
|
|
- exceptionMappings.put(AuthenticationServiceException.class.getName(),
|
|
|
|
- AuthenticationFailureServiceExceptionEvent.class.getName());
|
|
|
|
- exceptionMappings.put(LockedException.class.getName(), AuthenticationFailureLockedEvent.class.getName());
|
|
|
|
- exceptionMappings.put(CredentialsExpiredException.class.getName(),
|
|
|
|
- AuthenticationFailureCredentialsExpiredEvent.class.getName());
|
|
|
|
- exceptionMappings.put(DisabledException.class.getName(), AuthenticationFailureDisabledEvent.class.getName());
|
|
|
|
- exceptionMappings.put(BadCredentialsException.class.getName(),
|
|
|
|
- AuthenticationFailureBadCredentialsEvent.class.getName());
|
|
|
|
- exceptionMappings.put(UsernameNotFoundException.class.getName(),
|
|
|
|
- AuthenticationFailureBadCredentialsEvent.class.getName());
|
|
|
|
- exceptionMappings.put(ConcurrentLoginException.class.getName(),
|
|
|
|
- AuthenticationFailureConcurrentLoginEvent.class.getName());
|
|
|
|
- exceptionMappings.put(ProviderNotFoundException.class.getName(),
|
|
|
|
- AuthenticationFailureProviderNotFoundEvent.class.getName());
|
|
|
|
- exceptionMappings.put(ProxyUntrustedException.class.getName(),
|
|
|
|
- AuthenticationFailureProxyUntrustedEvent.class.getName());
|
|
|
|
- doAddExtraDefaultExceptionMappings(exceptionMappings);
|
|
|
|
|
|
+ doAddExtraDefaultExceptionMappings(DEFAULT_EXCEPTION_MAPPINGS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -189,7 +193,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
|
|
|
|
if (result != null) {
|
|
if (result != null) {
|
|
sessionController.registerSuccessfulAuthentication(result);
|
|
sessionController.registerSuccessfulAuthentication(result);
|
|
- applicationEventPublisher.publishEvent(new AuthenticationSuccessEvent(result));
|
|
|
|
|
|
+ publishEvent(new AuthenticationSuccessEvent(result));
|
|
|
|
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
@@ -222,7 +226,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
}
|
|
}
|
|
|
|
|
|
if (event != null) {
|
|
if (event != null) {
|
|
- applicationEventPublisher.publishEvent(event);
|
|
|
|
|
|
+ publishEvent(event);
|
|
} else {
|
|
} else {
|
|
if (logger.isDebugEnabled()) {
|
|
if (logger.isDebugEnabled()) {
|
|
logger.debug("No event was found for the exception " + lastException.getClass().getName());
|
|
logger.debug("No event was found for the exception " + lastException.getClass().getName());
|
|
@@ -273,6 +277,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
try {
|
|
try {
|
|
currentObject = iter.next();
|
|
currentObject = iter.next();
|
|
|
|
|
|
|
|
+ //TODO bad idea, should use assignable from or instance of
|
|
AuthenticationProvider attemptToCast = (AuthenticationProvider) currentObject;
|
|
AuthenticationProvider attemptToCast = (AuthenticationProvider) currentObject;
|
|
} catch (ClassCastException cce) {
|
|
} catch (ClassCastException cce) {
|
|
throw new IllegalArgumentException("AuthenticationProvider " + currentObject.getClass().getName()
|
|
throw new IllegalArgumentException("AuthenticationProvider " + currentObject.getClass().getName()
|
|
@@ -292,4 +297,10 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
|
|
public void setSessionController(ConcurrentSessionController sessionController) {
|
|
public void setSessionController(ConcurrentSessionController sessionController) {
|
|
this.sessionController = sessionController;
|
|
this.sessionController = sessionController;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private void publishEvent( ApplicationEvent event ) {
|
|
|
|
+ if ( applicationEventPublisher != null ) {
|
|
|
|
+ applicationEventPublisher.publishEvent( event );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|