Я пытаюсь найти способ перенаправить мой запрос с фильтра на страницу входа, но я не знаю, как перенаправить с сервлета. Я искал, но нашел метод sendRedirect(). Я не могу найти этот метод в моем объекте ответа в фильтре. В чем причина? Как я могу это решить?
Как перенаправить фильтр сервлета?
Ответы (6)
В фильтре ответ ServletResponse, а не HttpServletResponse. Следовательно, сделайте приведение к HttpServletResponse.
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
При использовании контекстного пути:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
Также не забудьте вызвать return; в конце.
Я пытаюсь найти способ перенаправить мой запрос с фильтра на страницу входа.
Нет
Вы просто вызываете
chain.doFilter(request, response);
от фильтра, и нормальный поток пойдет вперед.
Я не знаю, как перенаправить с сервлета
Ты можешь использовать
response.sendRedirect(url);
перенаправить с сервлета
response имеет тип ServletResponse и должен быть приведен к HttpServletResponse. Пример: HttpServletResponse resp = (HttpServletResponse) response; resp.sendRedirect("templateName || pathName");
- person Andrius; 15.05.2017
Если вы также хотите сохранить хэш и получить параметр, вы можете сделать что-то вроде этого (заполнить 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);
}
Попробуйте и проверьте, что ваш ServletResponse response является instanceof HttpServletResponse следующим образом:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
- person To Kra; 11.06.2015
Ваш объект ответа объявлен как ServletResponse. Чтобы использовать метод sendRedirect(), вы должны привести его к HttpServletResponse. Это расширенный интерфейс, который добавляет методы, связанные с протоколом HTTP.
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
- person To Kra; 11.06.2015
почему вы используете объект ответа. это объект ServletResponse, он не предоставляет метод sendRedirect(). вместо этого используйте объект запроса ServletRequest для пересылки запроса.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
request.getRequestDispatcher("login.html").forward(request,response);
return;
}
см. javadoc