Как лучше всего сделать общую операцию для всех методов контроллера в Spring MVC?

296
09 января 2017, 21:01

Использую Spring Boot. Задача довольно простая - в каждом методе у меня однотипные операции, проверка, вошел ли пользователь, если не вошел кидаем его в одно место, иначе продолжаем, в случае ошибки ещё куда-то кидаем. Пока что я просто заключил это в отдельный метод, где делаются все проверки и вызывается переданная параметром функция. Но всё равно громоздко выглядит, куча одинаковых сигнатур методов, с перечнем одинаковых кук внутри:

public String method(
            @CookieValue(name = USER_ID_COOKIE_NAME, required = false) Cookie userId,
            @CookieValue(name = TOKEN_COOKIE_NAME, required = false) Cookie token) {
        return protectedAction(userId, token, user -> ...);
    }

То есть много таких методов получается. Я знаю есть и фильтры, и сервлеты, но что-то в голове не укладывается, как лучше всего сделать.

Или может не нужно никакого общего действия, может в спринге есть что-то поинтереснее для этих целей? Не я же первый, кто захотел достаточно активно с куками работать )

Answer 1

Вы можете воспользоваться аннотацией @ModelAttribute на методе. Тогда этот метод будет вызываться перед методами помеченными @RequestMapping. Вот пример

@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
    model.addAttribute(accountManager.findAccount(number));
}

В вашу модель будет добавлен новый атрибут.

Проверять залогинен ли пользователь лучше все используя Spring Security. Там вы можете прописать права на доступ к любой части вашего приложения.

READ ALSO
Добавление данных JSON в ComboBox

Добавление данных JSON в ComboBox

Подскажите, пожалуйста, как лучше всего добавить данные из JSON в ComboBoxГрафическая часть сделана с помощью Scene Builder, есть класс Controls, где прописаны...

261
Spring xml context

Spring xml context

Совсем недавно я начал изучать Java, в конце курса мне дали задание написать небольшой (в сравнении с проектами компании) учебный проектКогда...

282