Как перенаправить в сервлет фильтр? - PullRequest
48 голосов
/ 15 марта 2011

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

Ответы [ 5 ]

71 голосов
/ 15 марта 2011

В фильтре ответ имеет значение ServletResponse, а не HttpServletResponse. Поэтому выполните приведение к HttpServletResponse.

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

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

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

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

8 голосов
/ 15 марта 2011

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

Не

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

chain.doFilter(request, response);

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

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

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

response.sendRedirect(url);

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

6 голосов
/ 19 сентября 2013

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

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);
}
1 голос
/ 15 марта 2011

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

if (response instanceof HttpServletResponse) {
    response.sendRedirect(....);
}
0 голосов
/ 15 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...