- В чем преимущества получения принципала в качестве параметра
Principal principal
в контроллере spring, а затем передать его на уровень сервиса через получение принципала в сервисном уровне, еслиSecurityContextHolder.getContext().getAuthentication().getPrincipal()
? - Каков наилучший подход к получению основных деталей на уровне обслуживания без проверки объектов
getAuthentication()
иgetPrincipal()
на всюду везде (что-то вроде пользовательской оболочки)?
Spring MVC, получение принципала из контекста безопасности на уровне обслуживания
Ответ 1
-
- Ваш API обслуживания будет более прост в использовании. Вы увидите зависимость от принципала напрямую, поэтому вы не будете ошибочно ссылаться на какой-либо метод службы в среде, где принципал не существует.
- В целом, меньше зависимостей от кода SpringSecurity означает меньше проблем в случае перехода на новую версию безопасности Spring.
- Вы сможете повторно использовать свой сервисный уровень в среде, где Spring Безопасность не существует.
- Подготовьте некоторый класс-оболочку (например, AuthenticationService). Добавьте к этому методу getPrincipal(). Внедрите свои проверки. Inject AuthenticationService повсеместно инициирует прямые вызовы SecurityContextHolder.