Spring Security - предотвращение AccessDeniedException от остановки нормального потока приложения - PullRequest
1 голос
/ 17 февраля 2011

Я использую Spring Secuirty 3 с модулем ACL.Я защищаю методы с помощью аннотаций @ PreAuthentication , используя пользовательский PermissionEvaluator .Работает нормально, однако каждый раз, когда PermissionEvaluator возвращает ACCESS_DENIED AccessDeniedException в какой-то момент выбрасывается, и это останавливает выполнение приложения.Желаемым поведением будет то, что когда PermissionEvaluator возвращает и ACCESS_DENIED , вызов защищенного метода только предотвращается (пропускается), а остальная часть приложения продолжает работать в обычном режиме.У кого-нибудь есть идеи как этого добиться?

1 Ответ

0 голосов
/ 26 сентября 2011

Если вы поместите каждый вызов туда, где вы хотите, чтобы это происходило в try...catch, вы можете получить такое поведение.По сути, поскольку это исключение, к нему будет применяться любая обычная обработка исключений.Если ваше приложение может обработать это исключение и продолжить нормально, то сделайте именно это!


Вот пример того, что я имею в виду:

// The 1st method that could be denied but you want to continue execution after
try {
    // Call method A that will throw the exception
} catch (/*The exception you expect to be thrown and want to continue after*/){}


// The 2nd method that could be denied but you want to continue execution after
try {
    // Call method B that will throw the exception
} catch (/*The exception you expect to be thrown and want to continue after*/){}

etc.

Да, оно добавляет многонакладные расходы на вызов этих методов, но это довольно простой способ разрешить продолжение выполнения после возникновения исключения.

Я бы также сказал, что это также более правильно, поскольку вызывающий код делает знаю, как бороться с этими исключениями.Это также не требует дополнительной настройки Spring, что означает, что поведение кода остается ближе к настройке по умолчанию и не зависит от внешних конфигураций для определения его поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...