Я реализую пользовательский 'AuthenticationProvider'. Если не аутентифицирован, я делаю исключение внутри функции «authenticate», как показано ниже.Захват исключения в AuthenticationProvider
public class DelegatingLdapAuthenticationProvider implements AuthenticationProvider {
private ActiveDirectoryLdapAuthenticationProvider primaryProvider;
private List<ActiveDirectoryLdapAuthenticationProvider> secondaryProviders = new ArrayList<>();
public DelegatingLdapAuthenticationProvider() {
}
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
Authentication result = null;
AuthenticationException exception = null;
try {
result = primaryProvider.authenticate(authentication);
} catch (AuthenticationException e) {
exception = e;
for (ActiveDirectoryLdapAuthenticationProvider secondaryProvider : secondaryProviders) {
try {
result = secondaryProvider.authenticate(authentication);
if (result.isAuthenticated()) {
break;
}
} catch (AuthenticationException e1) {
exception = e;
}
}
}
if (result == null || !result.isAuthenticated()) {
throw exception;
}
return result;
}
У меня есть глобальный обработчик исключений, как показано ниже.
Когда исключение выбрасывается внутри функции «authenticate», глобальный обработчик исключений не вызывается. За всеми остальными исключениями он называется. Я хочу поймать исключение внутри глобального обработчика исключений и возвратить сообщение об ошибке. Как я могу это сделать? Любая помощь оценивается. Заранее спасибо.
Вы действительно подтвердили, что исключение выбрасывается или ваш провайдер вызывается в первую очередь? – pvg