我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了但我发现的是sendRedirect()
方法。我无法在过滤器中找到我的响应对象。原因是什么?我该如何解决这个问题?
答案 0 :(得分:70)
在过滤器中,响应属于ServletResponse
而非HttpServletResponse
。因此,转换为HttpServletResponse
。
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
如果使用上下文路径:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
也不要忘记最后致电return;
。
答案 1 :(得分:8)
我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面
的不要强> 的
您只需调用
chain.doFilter(request, response);
来自过滤器,正常流程将继续。
我不知道如何从servlet重定向
您可以使用
response.sendRedirect(url);
从servlet重定向
答案 2 :(得分:6)
如果你还想保留hash和get参数,你可以这样做(在filter init处填充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);
}
答案 3 :(得分:1)
尝试检查ServletResponse response
是instanceof HttpServletResponse
是这样的:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
答案 4 :(得分:0)
您的响应对象被声明为ServletResponse
。要使用sendRedirect()
方法,您必须将其强制转换为HttpServletResponse
。这是一个扩展接口,添加了与HTTP协议相关的方法。
答案 5 :(得分:0)
你为什么使用响应对象。它是一个 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;
}