Какой паттерн реализуют цепочка сервлетных фильтров и фильтр-цепочка Spring Security?
Chain of Responsibility: запрос идёт по звеньям, и каждое решает, обработать ли его и передавать ли дальше (chain.doFilter). Возможность прервать цепочку — отличие от декоратора, который всегда делегирует.
- Spring Security: аутентификация, авторизация, CSRF — звенья одной цепочки
- Также: интерсепторы HTTP-клиентов, middleware
- Порядок звеньев критичен
А ещё Звено может и изменить запрос, и обработать ответ на обратном пути
Подробно
Каждый фильтр решает сам, вызывать ли chain.doFilter дальше — именно возможность прервать обработку отличает этот паттерн от декоратора, который всегда делегирует. В Spring Security звенья цепочки — аутентификация, авторизация, CSRF. Тот же паттерн у интерсепторов HTTP-клиентов и middleware.
Что хотят услышать
- Название и механизм.
- Отличие от декоратора.
Частые ошибки
- Путать с декоратором: у декоратора нет права остановить вызов.
- Забывать, что порядок звеньев в цепочке значим.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Decorator
- ✗Mediator
- ✗Template Method с хуками
- ✓Chain of Responsibility
Что спросят дальше
- Чем фильтр отличается от интерсептора в Spring MVC?
- Почему порядок фильтров в Spring Security важен?
Разбор темы
- Поведенческие паттерны
Strategy, Template Method, Observer, Command, Chain of Responsibility, State, Iterator и Visitor — с примерами из JDK, Spring и заменой паттернов лямбдами и sealed-типами.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.