Я пытаюсь найти метод перенаправления моего запроса с фильтра на страницу входа, но я не знаю, как перенаправить из сервлета. Я искал, но я нахожу метод 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.