Итак, перечисленные подходы хороши, но все они имеют ограничения.AOP - хорошая идея, но его ограничение заключается в том, что мне нужен способ получить доступ к объектам запроса и ответа, если я хочу перенаправить или изменить ответ.Методы контроллера не обязательно нуждаются в запросах и ответах, а требование, чтобы они выглядели, выглядит не элегантным.Я мог бы использовать весеннюю магию, чтобы получить объект запроса от Аспекта, но я не мог найти способ получить ответ.
В конце концов я нашел средний путь.Я использовал бин-фильтр, чтобы получить объекты запроса и ответа и сохранить их в ThreadLocal.Затем я создал аспект, имеющий ссылку на этот фильтр, чтобы он мог легко видеть объекты запроса и ответа.
Затем я обернул аспект вокруг методов, основанных на аннотации, поэтому я даже не сталнужно проверить, присутствовала ли аннотация с использованием кода.
Этот комбинированный подход, кажется, работает отлично!
Единственный недостаток - я не могу найти хороший способ написатьинтеграционный тест, который проверяет, что аспект вызывается при поступлении запроса на этот URL.Немного страшно, что удаление одной аннотации оставляет все мои тесты успешными, но пропускает неавторизованных пользователей.
Спасибо всем за отличные предложения!