Возобновление цепочки фильтров javax.servlet.Filter после асинхронного тайм-аута при использовании пружины - PullRequest
1 голос
/ 28 июня 2019

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

У меня внутри фильтра, который запускается первым, добавляется задержка:

AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(1000L);

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

Я пытался добавить слушателя:

asyncContext.addListener(new AsyncListener() {
@Override
public void onTimeout(AsyncEvent event) throws IOException {
    try {
        chain.doFilter(event.getAsyncContext().getRequest(), event.getAsyncContext().getResponse());
    } catch (ServletException e) {
        throw new RuntimeException(e);
    }
}

Похоже, был назван следующий Фильтр в цепочке, но я не думаю, что весна была довольна этим. По некоторым запросам я не получил никаких ошибок, но для API входа в систему я всегда получал 401, но мой код, который проверяет аутентификацию, не вызывался. В других случаях я видел исключения нулевого указателя: 2019-06-28 13: 27: 08,772 [admin-78] [::] WARN advice.CatchAllException - Catching

java.lang.NullPointerException
        at org.springframework.util.StringUtils.uriDecode(StringUtils.java:724)
        at org.springframework.web.util.UriUtils.decode(UriUtils.java:342)
        at org.springframework.web.util.UrlPathHelper.decodeInternal(UrlPathHelper.java:464)
        at org.springframework.web.util.UrlPathHelper.decodeRequestString(UrlPathHelper.java:455)
        at org.springframework.web.util.UrlPathHelper.getContextPath(UrlPathHelper.java:344)
        at org.springframework.web.util.UrlPathHelper.getPathWithinApplication(UrlPathHelper.java:239)
        at org.springframework.web.util.UrlPathHelper.getPathWithinServletMapping(UrlPathHelper.java:192)
        at org.springframework.web.util.UrlPathHelper.getLookupPathForRequest(UrlPathHelper.java:169)
        at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:365)

Как я могу продолжить работу с цепочкой фильтров?

...