Как я могу выполнить общий код для большинства запросов в моем Spring MVC Web App? - PullRequest
6 голосов
/ 19 января 2012

1001 * т.е. *

У меня есть различные URL, сопоставленные с использованием Spring MVC RequestMapping

@RequestMapping(value = "/mystuff", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/dsf", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/eee", method = RequestMethod.GET) 

и т.д.

Я хочу выполнить несколько общих действий перед примерно 90% моих запросов. Это через несколько контроллеров.

Есть ли способ сделать это, не углубляясь в АОП? И если мне придется использовать аспекты, какие-либо указания о том, как это сделать?!

Спасибо!

Дополнительная информация:

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

Ответы [ 3 ]

6 голосов
/ 19 января 2012
3 голосов
/ 13 марта 2014

Перехватчик является решением. У него есть методы preHandler и postHandler, которые будут вызываться до и после каждого запроса соответственно. Вы можете подключиться к каждому объекту HTTPServletRequest, а также пропустить несколько, копая его.

вот пример кода:

@Component
public class AuthCodeInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {

        // set few parameters to handle ajax request from different host
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
        response.addHeader("Access-Control-Max-Age", "1000");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Cache-Control", "private");

        String reqUri = request.getRequestURI();
        String serviceName = reqUri.substring(reqUri.lastIndexOf("/") + 1,
                reqUri.length());
                if (serviceName.equals("SOMETHING")) {

                }
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {

        super.postHandle(request, response, handler, modelAndView);
    }
}
1 голос
/ 21 января 2012

Метод HandlerInterceptor.preHandle () предоставляет вам доступ к запросу и ответу, а также к целевому обработчику. В Spring 3.1 это будет иметь тип HandlerMethod, который дает вам доступ к целевому классу контроллера и методу. Если это поможет, вы можете попробовать исключить целые классы контроллеров по имени типа, которое будет строго типизировано и без указания явных URL.

Другой вариант - создать перехватчик, сопоставленный с набором шаблонов URL. См. Раздел по настройке Spring MVC в справочной документации.

...