Выбор ответа Middle Spring Security обновлено
@PreAuthorize через this
Вопрос
Публичный метод export() без аннотаций вызывает в том же классе this.deleteAll(), помеченный @PreAuthorize("hasRole('ADMIN')"). Обычный пользователь вызвал export(). Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: deleteAll выполнится без проверки: вызов мимо прокси. Методная безопасность построена на тех же AOP-прокси, что и транзакции.
Варианты ответа
- AccessDeniedException при вызове deleteAll
- Проверка выполнится при старте приложения
- Spring Security проверяет аннотации через байткод, поэтому сработает
- deleteAll выполнится без проверки: вызов мимо проксиправильный ответ
Разбор
Методная безопасность построена на тех же AOP-прокси, что и транзакции. Внутренний вызов через this не проходит через прокси, и проверка не выполняется: это уже уязвимость. Проверки прав ставят на точки входа (публичные методы, которые вызываются снаружи) или выносят защищённую операцию в отдельный бин.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.