Обработка отказа в доступе на основе ролей в Spring Security — как?

Я работаю над приложением на основе Spring с Spring Security. У меня есть пользователи с разными ролями, и я хотел бы реализовать обработку отказа в доступе в зависимости от роли. В частности, желаемый эффект будет следующим: когда пользователь пытается получить доступ к ресурсу, к которому ему не разрешено, я хотел бы различать случай, когда отказ связан с тем, что пользователь не аутентифицирован, и случай, когда это связано с недостаточные привилегии (неправильная роль). Неаутентифицированных пользователей можно направить на обычную страницу 403, а тех, у кого просто неправильная роль, я бы хотел перенаправить на форму, в которой они могли бы запросить предоставление соответствующей роли.

Я думаю о том, чтобы либо добавить «‹access-denied-handler error-page="/xyz"›» и внедрить контроллер xyz, либо как-то (пока не знаю, как) реализовать это как настраиваемый фильтр.

Как бы вы решили проблему? Есть ли лучшая практика для этого? Пытался найти в Google несколько примеров, так как я считаю это довольно распространенным шаблоном, но безуспешно.

Большое спасибо.


person quosoo    schedule 07.02.2012    source источник


Ответы (1)


Как бы вы решили проблему?

Я бы попытался реализовать свой собственный AccessDeniedHandler и попробуйте "зарегистрировать" его в org.springframework.security.web.access.ExceptionTranslationFilter (читайте его класс JavaDoc!)

person Ralph    schedule 07.02.2012