如何在servletfilter中redirect?

我试图find一个方法来redirect我的请求从filterlogin页面,但我不知道如何从servletredirect。 我search,但我发现是sendRedirect()方法。 我无法find这个方法在我的反应obect在filter。 是什么原因? 我该如何解决这个问题?

在Filter中,响应是ServletResponse而不是HttpServletResponse 。因此,将其转换为HttpServletResponse

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

如果使用上下文path:

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

也不要忘记打电话return; 最后。

我试图find一个方法来redirect我的请求从filterlogin页面

你只是调用

 chain.doFilter(request, response); 

从filter和正常的stream程将继续。

我不知道如何从servletredirect

您可以使用

 response.sendRedirect(url); 

从servletredirect

如果你还想保持哈希和获取参数,你可以做这样的事情(在filterinit填充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 responseinstanceof HttpServletResponse一个instanceof HttpServletResponse如下所示:

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

您的响应对象被声明为ServletResponse 。 要使用sendRedirect()方法,您必须将其转换为HttpServletResponse 。 这是一个扩展的接口,添加了与HTTP协议相关的方法。