Spring MVC, получение принципала из контекста безопасности на уровне обслуживания

  • В чем преимущества получения принципала в качестве параметра Principal principal в контроллере spring, а затем передать его на уровень сервиса через получение принципала в сервисном уровне, если SecurityContextHolder.getContext().getAuthentication().getPrincipal()?
  • Каков наилучший подход к получению основных деталей на уровне обслуживания без проверки объектов getAuthentication() и getPrincipal() на всюду везде (что-то вроде пользовательской оболочки)?

Ответ 1

    • Ваш API обслуживания будет более прост в использовании. Вы увидите зависимость от принципала напрямую, поэтому вы не будете ошибочно ссылаться на какой-либо метод службы в среде, где принципал не существует.
    • В целом, меньше зависимостей от кода SpringSecurity означает меньше проблем в случае перехода на новую версию безопасности Spring.
    • Вы сможете повторно использовать свой сервисный уровень в среде, где Spring Безопасность не существует.
  • Подготовьте некоторый класс-оболочку (например, AuthenticationService). Добавьте к этому методу getPrincipal(). Внедрите свои проверки. Inject AuthenticationService повсеместно инициирует прямые вызовы SecurityContextHolder.