2
0
Эх сурвалжийг харах

fix problems when not loaded through Spring context

Carlos Sanchez 19 жил өмнө
parent
commit
80c1ae3bde

+ 34 - 23
core/src/main/java/org/acegisecurity/providers/ProviderManager.java

@@ -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 );
+        }
+    }
 }