如何在servlet过滤器中重定向?

was*_*lli 49 java redirect servlets servlet-filters

我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向.我搜索但我发现的是sendRedirect()方法.我无法在过滤器中找到我的响应对象.原因是什么?我怎么解决这个问题?

Dea*_*mer 73

在Filter中,响应是ServletResponse而不是HttpServletResponse.Hence执行转换HttpServletResponse.

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
Run Code Online (Sandbox Code Playgroud)

如果使用上下文路径:

httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
Run Code Online (Sandbox Code Playgroud)

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


Jig*_*shi 8

我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面

你只是调用

chain.doFilter(request, response);
Run Code Online (Sandbox Code Playgroud)

从过滤器和正常流程将继续.

我不知道如何从servlet重定向

您可以使用

response.sendRedirect(url);
Run Code Online (Sandbox Code Playgroud)

从servlet重定向

  • 但是,如果您因为用户未登录而要中止请求,那么它很有用. (10认同)
  • 你为什么告诉他不要从过滤器重定向到身份验证页面?请详细说明? (2认同)

use*_*877 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);
}
Run Code Online (Sandbox Code Playgroud)