|  | @@ -51,6 +51,7 @@ import org.apache.commons.logging.LogFactory;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.InitializingBean;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import org.springframework.context.ApplicationEvent;
 | 
	
		
			
				|  |  |  import org.springframework.context.ApplicationEventPublisher;
 | 
	
		
			
				|  |  |  import org.springframework.context.ApplicationEventPublisherAware;
 | 
	
		
			
				|  |  |  import org.springframework.context.MessageSource;
 | 
	
	
		
			
				|  | @@ -95,6 +96,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |      //~ Static fields/initializers =====================================================================================
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private static final Log logger = LogFactory.getLog(ProviderManager.class);
 | 
	
		
			
				|  |  | +    private static final Properties DEFAULT_EXCEPTION_MAPPINGS = new Properties();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //~ Instance fields ================================================================================================
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -102,7 +104,28 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |      private ConcurrentSessionController sessionController = new NullConcurrentSessionController();
 | 
	
		
			
				|  |  |      private List providers;
 | 
	
		
			
				|  |  |      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 ========================================================================================================
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -111,26 +134,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |          Assert.notNull(this.messages, "A message source must be set");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          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) {
 | 
	
		
			
				|  |  |                      sessionController.registerSuccessfulAuthentication(result);
 | 
	
		
			
				|  |  | -                    applicationEventPublisher.publishEvent(new AuthenticationSuccessEvent(result));
 | 
	
		
			
				|  |  | +                    publishEvent(new AuthenticationSuccessEvent(result));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      return result;
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -222,7 +226,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (event != null) {
 | 
	
		
			
				|  |  | -            applicationEventPublisher.publishEvent(event);
 | 
	
		
			
				|  |  | +            publishEvent(event);
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              if (logger.isDebugEnabled()) {
 | 
	
		
			
				|  |  |                  logger.debug("No event was found for the exception " + lastException.getClass().getName());
 | 
	
	
		
			
				|  | @@ -273,6 +277,7 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  |                  currentObject = iter.next();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                //TODO bad idea, should use assignable from or instance of 
 | 
	
		
			
				|  |  |                  AuthenticationProvider attemptToCast = (AuthenticationProvider) currentObject;
 | 
	
		
			
				|  |  |              } catch (ClassCastException cce) {
 | 
	
		
			
				|  |  |                  throw new IllegalArgumentException("AuthenticationProvider " + currentObject.getClass().getName()
 | 
	
	
		
			
				|  | @@ -292,4 +297,10 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
 | 
	
		
			
				|  |  |      public void setSessionController(ConcurrentSessionController sessionController) {
 | 
	
		
			
				|  |  |          this.sessionController = sessionController;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void publishEvent( ApplicationEvent event ) {
 | 
	
		
			
				|  |  | +        if ( applicationEventPublisher != null ) {
 | 
	
		
			
				|  |  | +            applicationEventPublisher.publishEvent( event );
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |