Предположим, вы разрабатываете корпоративное приложение на основе Spring.Есть четыре проблемы безопасности, которые вы обычно должны решать: аутентификация, безопасность веб-запросов, безопасность уровня обслуживания (т.е. ваши методы, которые реализуют бизнес-логику) и безопасность экземпляров объекта домена (то есть разные объекты домена имеют разные разрешения).С учетом этих типичных требований:
Безопасность веб-запроса: Спецификация сервлета обеспечивает подход для защиты URI вашего запроса.Однако эти URI могут быть выражены только в собственном формате пути ограниченного URI спецификации сервлета.Spring Security предоставляет гораздо более комплексный подход.Например, вы можете использовать пути Ant или регулярные выражения, вы можете рассматривать части URI, отличные от просто запрашиваемой страницы (например, вы можете учитывать параметры HTTP GET), и вы можете реализовать свой собственный источник данных конфигурации во время выполнения.Это означает, что безопасность вашего веб-запроса может динамически изменяться во время фактического выполнения вашего веб-приложения.
Уровень обслуживания и безопасность объекта домена: Отсутствие поддержки в сервлетеСпецификация безопасности уровня сервиса или безопасности экземпляра объекта домена представляет серьезные ограничения для многоуровневых приложений.Обычно разработчики либо игнорируют эти требования, либо реализуют логику безопасности в своем коде контроллера MVC (или, что еще хуже, внутри представлений).У этого подхода есть серьезные недостатки:
a. Разделение интересов: Авторизация является сквозной задачей и должна осуществляться как таковая.Контроллеры MVC или представления, реализующие код авторизации, усложняют тестирование логики контроллера и авторизации, затрудняют отладку и часто приводят к дублированию кода.
b. Поддержка расширенных клиентов и веб-сервисов: Если в конечном итоге необходимо поддерживать дополнительный тип клиента, любой код авторизации, встроенный в веб-слой, не подлежит повторному использованию.Следует учитывать, что экспортеры удаленного взаимодействия Spring экспортируют только бины уровня обслуживания (не контроллеры MVC).Так как такая логика авторизации должна быть расположена на уровне сервисов для поддержки множества типов клиентов.
c. Проблемы с наслоениями: Контроллер или представление MVC - это просто неправильный архитектурный уровень для реализации решений по авторизации, касающихся методов уровня служб или экземпляров объекта домена.Хотя Принципал может быть передан на уровень сервисов, чтобы он мог принять решение об авторизации, это может привести к дополнительному аргументу для каждого метода уровня сервисов.Более элегантный подход заключается в использовании ThreadLocal для хранения Принципала, хотя это, вероятно, увеличит время разработки до такой степени, что станет более экономичным (с точки зрения затрат и выгод) просто использовать выделенную инфраструктуру безопасности.
*+1036 * д.
Качество кода авторизации: Часто о веб-фреймворках говорят, что они "облегчают делать правильные вещи и труднее делать неправильные".Каркасы безопасности одинаковы, потому что они разработаны абстрактно для широкого спектра целей.Написание собственного кода авторизации с нуля не обеспечивает «проверки проекта», которую могла бы предложить инфраструктура, а внутренний код авторизации, как правило, испытывает недостаток в усовершенствованиях, возникающих в результате широкого развертывания, экспертной оценки и новых версий.