Как исключить статические ресурсы из запроса - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь исключить статические ресурсы из пути @RequestMapping, чтобы избежать избыточных вызовов методов.

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

GlobalController.java

@RequestMapping(value = "/")
public class GlobalControllerAdvice {

    public static int k;

    @Autowired
    private UsersService usersService;

    @ModelAttribute("unread")
    public int unread(Principal principal) {

        int unread = 0;

        k++;
        System.err.println("Inside unread " + k);

        if (principal != null) {
            User user = usersService.getWithUser(principal.getName(), "notifications");
            for (Notification n : user.getNotifications())
                if (!n.isRead())
                    unread++;
        }

        return unread;
    }
}

Обработчик ресурсов

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("/resources/");
}

Ожидаемый результатдолжен исключить все URL, которые содержат «static», но теперь это не так, и unread () вызывается для каждого изображения и сценария на моих страницах jsp.

1 Ответ

0 голосов
/ 04 января 2019

Если вы хотите сделать это только с Spring, это возможно, но немного грязно:

  1. Вам либо понадобится SimpleUrlHandlerMapping , для которого вы может явно указать шаблоны URL, которые должны быть сопоставлены контроллеры ИЛИ расширяют его для поддержки «игнорирования» URL, таких как «css /**".
  2. Вам нужно написать собственную HttpRequestHandler реализацию, которая в основном состоит из вызов getServletContext (). getRequestDsipatcher (). include () вернуть запрошенный ресурс как есть.
  3. Вы должны будете зарегистрировать этот обработчик как defaultHandler для вышеупомянутого SimpleUrlHandlerMapping.

Как только все это будет сделано, все запросы, которые не могут быть сопоставлены с вашими контроллерами, будут перенаправлены на ваш HttpRequestHandler и обработаны "как есть".

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