Подтвердить что ты не робот

Должны ли быть применены аннотации уровня метода безопасности spring на уровне контроллера или уровне обслуживания?

Я использую spring безопасность с @PreAuthorize в своих методах контроллера. Мое рассуждение состояло в том, что я хотел, чтобы проверка авторизации происходила предсказуемо на одном уровне и как можно раньше в запросе. Тем не менее, я просто прочитал документацию spring security 3 и увидел, что они рекомендуют применять защиту уровня метода на уровне службы (но они не говорят, почему).

Мой вопрос: должны ли spring аннотации уровня метода защиты на уровне контроллера или уровня сервиса? (Или "оба", или "это зависит"?) Более важно: почему?

4b9b3361

Ответ 1

"Это зависит":). Если ваше приложение имеет уровень обслуживания, через который применяется вся ваша бизнес-логика, это обычно является чистым местом для применения ваших ограничений безопасности и быть уверенным, что вы не пропустили какие-либо угловые случаи.

Веб-код, как правило, более беспорядочный, там его больше, он изменяется быстрее, и вы можете в конечном итоге вызвать одни и те же методы обслуживания из нескольких мест. Кто-то может добавить новый контроллер и забыть его правильно защитить. Кроме того, у вас могут быть разные типы клиентов, вызывающих одни и те же услуги.

Но это зависит от того, как структурировано ваше приложение и каковы ваши варианты использования. У вас может быть хороший аргумент в пользу того, почему вы хотите защитить контроллер.

Ответ 2

Подумайте о повторном использовании кода. Вы собираетесь использовать свою службу в другом месте? Не только для подачи вашего веб-уровня? Мы также повторно используем наши сервисы с мостами jms, чтобы обеспечить наш уровень обслуживания.