@WebFilter, кажется, игнорирует включенные файлы Javascript - PullRequest
0 голосов
/ 01 мая 2018

(это касается Java EE / Servlets WebFilters)

В настоящее время я пытаюсь написать WebFilter, который перехватывает все запросы к веб-приложению.

Однако я заметил, что WebFilter не видит запросы, сделанные в тегах <script>.

HTML-страница, которая обслуживается, содержит таблицу стилей ...

<link rel="stylesheet" href="/webjars/bootstrap/4.1.0/css/bootstrap.min.css">

... и три Javascript-включая ...

<script src="/webjars/jquery/3.0.0/jquery.min.js"></script>
<script src="/webjars/popper.js/1.14.1/popper.min.js"></script>
<script src="/webjars/bootstrap/4.1.0/js/bootstrap.min.js"></script>

Однако @WebFilter видит запросы только к корневой странице (GET /) и к таблице стилей, которые отображаются в журналах, созданных с помощью фильтра ниже.

12: 04: 51 909 INFO Init
12: 04: 51,909 ИНФОРМАЦИЯ doFilter
12: 04: 51,909 ИНФОРМАЦИЯ Запрос сервлета: HttpServletRequestImpl [GET /]
12: 04: 51,959 ИНФОРМАЦИЯ doFilter
12: 04: 51,959 ИНФОРМАЦИЯ Запрос сервлета: HttpServletRequestImpl [GET /webjars/bootstrap/4.1.0/css/bootstrap.min.css]

Реализация WebFilter выглядит следующим образом:

@WebFilter(filterName = "webjarFilter", urlPatterns = "/*")
public class WebJarFilter implements Filter {
    private Logger logger = LoggerFactory.getLogger(getClass());

    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("Init");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        logger.info("doFilter");
        logger.info("ServletRequest: {}", servletRequest);
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {
        logger.info("destroy");
    }
}

Файл web.xml содержит следующее отображение:

<filter-mapping>
    <filter-name>webjarFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Мой вопрос сейчас: Может кто-нибудь сказать мне, почему фильтр не перехватывает запросы, которые должны быть сгенерированы из тегов <script>?

Наблюдения и дополнительная информация:

  • Я тестирую на Wildfly 12 с Java EE 7
  • Непосредственное открытие Javascript-файлов вызовет фильтр
  • При обращении к файлам Javascript с неверным путем фильтр видит запросы. Фильтр

1 Ответ

0 голосов
/ 01 мая 2018

Похоже, я понял это сам.

Это на самом деле результат поведения Firefox. При вызове того же сервера из Chrome фильтр видит все запросы. Очевидно, в Firefox есть некоторый механизм кэширования, который применяется к сценариям.

...