Фильтр сервлета для всех запросов

Мне интересно, как я могу установить в web.xml фильтр, который вызывается по каждому запросу?

Ответ 1

просто создайте фильтр и сопоставьте его с /*

например.

    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.mycompany.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Ответ 2

Добавить сопоставление фильтра с подстановочным знаком '*'.

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

Ответ 3

Вы уверены, что запрос попал в контроллер/сервлет? Если он делает Ajax-вызов или запускает JS, фильтр не срабатывает.

Ответ 4

Spring Security Web определяет все URL-адреса как /**. Так что должно работать на все запросы.

See- org.springframework.security.web.util.matcher.AntPathRequestMatcher

Он определяет постоянную MATCH_ALL как /** и эта последняя переменная используется в методе matches.

Вставка ниже определения метода из org.springframework.security.web.util.matcher.AntPathRequestMatcher где он решает, соответствует ли какой-либо URL-адрес запроса или нет. Если шаблон установлен в MATCH_ALL aka /** он возвращает true.

public boolean matches(HttpServletRequest request) {
        if (this.httpMethod != null && StringUtils.hasText(request.getMethod())
                && this.httpMethod != valueOf(request.getMethod())) {
            if (logger.isDebugEnabled()) {
                logger.debug("Request '" + request.getMethod() + " "
                        + getRequestPath(request) + "'" + " doesn't match '"
                        + this.httpMethod + " " + this.pattern + "'");
            }

            return false;
        }

        if (this.pattern.equals(MATCH_ALL)) {
            if (logger.isDebugEnabled()) {
                logger.debug("Request '" + getRequestPath(request)
                        + "' matched by universal pattern '/**'");
            }

            return true;
        }

        String url = getRequestPath(request);

        if (logger.isDebugEnabled()) {
            logger.debug("Checking match of request : '" + url + "'; against '"
                    + this.pattern + "'");
        }

        return this.matcher.matches(url);
    }