Как перенаправить фильтр сервлетов?

Я пытаюсь найти метод перенаправления моего запроса с фильтра на страницу входа, но я не знаю, как перенаправить из сервлета. Я искал, но я нахожу метод sendRedirect(). Я не могу найти этот метод при ответе на фильтр в фильтрах. Какая причина? Как я могу это решить?

Ответ 1

В фильтре отклик имеет значение ServletResponse, а не HttpServletResponse. Сдайте приведение в HttpServletResponse.

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");

Если используется контекстный путь:

httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");

Также не забудьте вызвать return; в конце.

Ответ 2

Я пытаюсь найти метод перенаправления моего запроса с фильтра на страницу входа

Не

Вы просто вызываете

chain.doFilter(request, response);

от фильтра и нормальный поток будет идти вперед.

Я не знаю, как перенаправить из сервлета

Вы можете использовать

response.sendRedirect(url);

для перенаправления из сервлета

Ответ 3

Если вы также хотите сохранить хэш и получить параметр, вы можете сделать что-то вроде этого (заполните redirectMap при инициализации фильтра):

String uri = request.getRequestURI();

String[] uriParts = uri.split("[#?]");
String path = uriParts[0];
String rest = uri.substring(uriParts[0].length());

if(redirectMap.containsKey(path)) {
    response.sendRedirect(redirectMap.get(path) + rest);
} else {
    chain.doFilter(request, response);
}

Ответ 4

Попробуйте и проверьте ваш ServletResponse response как instanceof HttpServletResponse так:

if (response instanceof HttpServletResponse) {
    response.sendRedirect(....);
}

Ответ 5

Ваш объект ответа объявлен как ServletResponse. Чтобы использовать метод sendRedirect(), вы должны указать его на HttpServletResponse. Это расширенный интерфейс, который добавляет методы, связанные с протоколом HTTP.