Запрос на пересылку от фильтр

Мне нужно переслать мой запрос (в jsp, но я не думаю, что это важно) из http.Filter если URI исходного запроса проходит некоторую проверку того, что мой фильтр запускается.

Я нашел эту страницу , которая столкнулась с подобной задачей

Тем не менее мне нужно вычислить следующее:

  1. Как я могу получить ServletContext в Метод doFilter () (для вызова API переадресации) getServletContext () не распознается

  2. Должен ли я вызывать chain.doFilter () до вперед, после форварда или нет вообще? Кроме того, нужно ли мне вызывать chain.doFilter () , если моя проверка прошла успешно или только если она не прошла (потому что в этом случае я не буду продолжать пересылать свою страницу)?

Этот вопрос фактически продолжается эта тема , чтобы быть более очевидным, код может быть что-то вроде:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {
            HttpServletRequest httpServletRequest = ((HttpServletRequest)request);
            String requestURI = httpServletRequest.getRequestURI();
            String contextPath = httpServletRequest.getContextPath();
            if (){                                      
                getServletContext().getRequestDispatcher(
                "MySpecific.jsp").forward(request,response);

            }

        }
        chain.doFilter(request,response);

    }

14
задан Community 23 May 2017 в 10:31
поделиться

2 ответа

Как я могу получить ServletContext в методе doFilter ()?

httpServletRequest.getSession().getServletContext();

Должен ли я вызывать chain.doFilter () перед пересылкой, после пересылки или не вызывать вообще? Вдобавок мне нужно вызывать chain.doFilter (), если моя проверка прошла или только если она не удалась (потому что в этом случае я не буду продолжать пересылать свою страницу)?

Я бы сказал, что если вы переадресовали запрос, вы не должны вызывать chain.doFilter () - перенаправленный запрос будет отфильтрован в соответствии с его собственной конфигурацией фильтра. Однако, если ваша проверка не удалась, это зависит от семантики вашего веб-приложения - если исходная страница представляет собой своего рода общую ошибку / экран входа / приветствия, вы можете продолжить это, когда проверка не удалась. Трудно сказать, не зная больше контекста.

11
ответ дан 1 December 2019 в 12:37
поделиться

Чтобы получить ServletContext , у вас есть 2 варианта:

  • Сохранить из FilterConfig во время инициализации и вызвать FilterConfig.getServletContext ()

  • call HttpServletRequest.getSession (). getServletContext ()

Я не думаю, что вам обязательно нужен ServletContext , чтобы получить RequestDispatcher , поскольку вы могли бы просто позвонить HttpServletRequest.getRequestDispatcher () .

Что касается вызова FilterChain.doFilter () , если вы выполняете переадресацию, я бы подумал, что вы не будете звонить, поскольку после пересылки я предполагаю, что вы не хотите ничего из стандартное поведение. Если вы не перенаправляете (вы не попадаете в блок if), я бы вызвал метод FilterChain.doFilter () , однако это предполагает, что на другом конце есть цель, которая должна быть вызван.

11
ответ дан 1 December 2019 в 12:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: