Какие классы-обертки для сервлетов вы знаете
Servlet API предоставляет четыре класса-обёртки (Wrapper/Decorator pattern), которые позволяют модифицировать поведение запроса или ответа без изменения оригинальных объектов:
| Класс-обёртка | Оборачивает |
|---|---|
ServletRequestWrapper |
ServletRequest |
HttpServletRequestWrapper |
HttpServletRequest |
ServletResponseWrapper |
ServletResponse |
HttpServletResponseWrapper |
HttpServletResponse |
Обёртки чаще всего используются в фильтрах для модификации запроса или ответа перед передачей следующему звену в цепочке. Например, HttpServletRequestWrapper можно использовать для добавления заголовков, модификации параметров или кэширования тела запроса для повторного чтения.
В Spring Security активно используются обёртки для добавления информации об аутентифицированном пользователе в запрос. SecurityContextHolderAwareRequestWrapper оборачивает запрос, добавляя методы getUserPrincipal() и isUserInRole().
На собеседовании: упомяните паттерн Decorator — это показывает понимание Design Patterns. Практический пример: обёртка для кэширования
InputStreamзапроса, чтобы тело можно было прочитать несколько раз (по умолчанию поток читается один раз).