如何在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 response
是instanceof HttpServletResponse
一个instanceof HttpServletResponse
如下所示:
if (response instanceof HttpServletResponse) { response.sendRedirect(....); }
您的响应对象被声明为ServletResponse
。 要使用sendRedirect()
方法,您必须将其转换为HttpServletResponse
。 这是一个扩展的接口,添加了与HTTP协议相关的方法。