DefaultAuthenticationEventPublisher Default Event

Fixes gh-7825
This commit is contained in:
Zeeshan Adnan
2020-02-07 00:53:55 +06:00
committed by Josh Cummings
parent a90e579350
commit 51b9b2f693
2 changed files with 60 additions and 0 deletions

View File

@@ -64,6 +64,7 @@ public class DefaultAuthenticationEventPublisher implements AuthenticationEventP
private ApplicationEventPublisher applicationEventPublisher;
private final HashMap<String, Constructor<? extends AbstractAuthenticationEvent>> exceptionMappings = new HashMap<>();
private Constructor<? extends AbstractAuthenticationFailureEvent> defaultAuthenticationFailureEventConstructor;
public DefaultAuthenticationEventPublisher() {
this(null);
@@ -117,6 +118,13 @@ public class DefaultAuthenticationEventPublisher implements AuthenticationEventP
catch (IllegalAccessException | InvocationTargetException | InstantiationException ignored) {
}
}
else if (defaultAuthenticationFailureEventConstructor != null) {
try {
event = defaultAuthenticationFailureEventConstructor.newInstance(authentication, exception);
}
catch (IllegalAccessException | InvocationTargetException | InstantiationException ignored) {
}
}
if (event != null) {
if (applicationEventPublisher != null) {
@@ -163,6 +171,26 @@ public class DefaultAuthenticationEventPublisher implements AuthenticationEventP
}
}
/**
* Sets a default authentication failure event as a fallback event for any unmapped
* exceptions not mapped in the exception mappings.
*
* @param defaultAuthenticationFailureEventClass is the authentication failure event class
* to be fired for unmapped exceptions.
*/
public void setDefaultAuthenticationFailureEvent(
Class<? extends AbstractAuthenticationFailureEvent> defaultAuthenticationFailureEventClass) {
Assert.notNull(defaultAuthenticationFailureEventClass,
"The defaultAuthenticationFailureEventClass must not be null");
try {
this.defaultAuthenticationFailureEventConstructor = defaultAuthenticationFailureEventClass
.getConstructor(Authentication.class, AuthenticationException.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException("Default Authentication Failure event class "
+ defaultAuthenticationFailureEventClass.getName() + " has no suitable constructor");
}
}
private void addMapping(String exceptionClass,
Class<? extends AbstractAuthenticationFailureEvent> eventClass) {
try {