Spring Security: таможенные органы по работе - PullRequest
1 голос
/ 21 марта 2011

Мне нужно запустить старое приложение, используя Spring Security 3.

Это приложение уже имеет свою модель данных безопасности с:

simple model

Очень простодалеко.Я могу написать свои пользовательские usersByUsernameQuery и authoritiesByUsernameQuery.

Дело в том, что есть другая таблица, показывающая операцию (т.е. метод слоя @Service), которую может выполнить Роль:

real model

Таким образом, администратор может включить / отключить роль для доступа к операции через веб-интерфейс без повторного развертывания приложения.

Я все еще могу комментировать бизнеснапример, методы с @Secure('ROLE_ADMIN'), но мой пользовательский UserDetailsService должен знать хотя бы имя защищаемого метода, чтобы я мог выполнить правильный запрос.

Итак, вопрос: есть ли способчто мой обычай UserDetailsService может перехватить имя защищаемого метода?

1 Ответ

1 голос
/ 21 марта 2011

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

Вы бы решили проблему в AuthenticationProvider, а не в UserDetailsService, добавив туда слой отображения, который переводит роли пользователей (предоставляемые UserDetailsService) в права, которые пользователь имеет в приложении. , Они будут составлять набор полномочий, которые возвращаются в объекте Authentication, созданном AuthenticationProvider.

Уровень отображения будет напрямую использовать данные, которые предоставляет ваш интерфейс администрирования.

Возможно, вы захотите взглянуть на эту презентацию Майка Вайснера, в которой, помимо прочего, рассматривается аналогичный материал.

Кроме того, Spring Security 3.1 будет включать в себя дополнительную стратегию GrantedAuthorityMapper, чтобы упростить подключение такого вида.

...