Используя Spring MVC, можно определить методы фильтрации внутри самих контроллеров. - PullRequest
1 голос
/ 01 ноября 2011

Я знаю, что с помощью Spring MVC можно аннотировать весь класс контроллера с помощью аннотации RequestMapping.Также возможно аннотировать отдельные методы с помощью Requestmapping, чтобы каждое из их отображений запросов относилось к отображению запросов всего класса.

Было бы здорово, если бы тогда я мог назначить один метод контроллера,как своего рода фильтр для каждого контроллера, который выполняется перед каждым соответствующим методом действия данного метода.Возможно ли это, или я должен придерживаться существующего способа использования отдельного класса Filter для этого (чего, я надеюсь, можно избежать)

Ответы [ 4 ]

1 голос
/ 01 ноября 2011

Было бы здорово, если бы тогда я мог назначить один метод контроллера

Нет, для этой работы нет встроенного метода.


Но вы можете сделать очень грязный хак : метод, помеченный @ModelAttribute, будет выполнен до вызова методов контроллера.

Spring Reference: Глава 15.3.2.8 Предоставление ссылки на данные из модели с помощью @ ModelAttribute

Примечание

@ Аннотированные методы ModelAttribute выполняются до выбранного @RequestMapping аннотированный метод обработчика. Они эффективно предварительно заполнить неявную модель конкретными атрибутами, часто загружаемыми из базы данных. Такой атрибут может быть доступен через аннотированные параметры метода @ModelAttribute в выбранный метод обработчика, потенциально с применением привязки и проверки к этому.

Но я настоятельно рекомендую не делать этого взлома, вместо этого используйте AOP!

0 голосов
/ 15 марта 2018

Цель ModelAttribute совершенно иная. мы можем сделать это, создав собственную реализацию перехватчика MethodInterceptor (из aopalliance ) и используя ее в качестве AOP-советника .

Создайте aop-конфигурацию в своем приложении для вашего класса контроллера запросов и добавьте его в качестве советника относительно точки соединения, которую вы создали для этого класса контроллера.

Тогда этот советник будет вызван перед вызовом вашего метода.

0 голосов
/ 02 августа 2013

Похоже, вы хотите применить немного общей логики к методам в данном контроллере (в противном случае используйте фильтр).Если это так, почему бы не поместить эту логику в закрытый метод и вызвать его из всех методов, сопоставленных с запросом?Это добавило бы одну строку к каждому методу.Для применения аспекта или перехватчика к каждому методу вам потребуется добавить хотя бы одну строку (например, аннотацию).ПОЦЕЛУЙ.

0 голосов
/ 01 ноября 2011

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

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html

Ищите

aop: config или @ Aspect

Дополнительно для контроллеров могут работать перехватчики

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...