我正在尝试找到一种方法,将我的请求从过滤器重定向到登录页面,但我不知道如何从servlet进行重定向。我已经搜索过了,但我发现的是sendRedirect()
方法,但我在过滤器中的响应对象上找不到该方法。这是什么原因?我该如何解决?
我正在尝试找到一种方法,将我的请求从过滤器重定向到登录页面,但我不知道如何从servlet进行重定向。我已经搜索过了,但我发现的是sendRedirect()
方法,但我在过滤器中的响应对象上找不到该方法。这是什么原因?我该如何解决?
在过滤器中,响应类型为ServletResponse
而不是HttpServletResponse
。因此需要强制转换为HttpServletResponse
。
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
如果使用上下文路径:httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
还别忘了在结尾处调用return;
。
我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面
请勿
只需调用
chain.doFilter(request, response);
从过滤器中进行操作并使正常流程继续。
我不知道如何从servlet重定向
你可以使用
response.sendRedirect(url);
从servlet重定向
response
is of type ServletResponse
and it should be casted to HttpServletResponse
.Example :
HttpServletResponse resp = (HttpServletResponse) response;
resp.sendRedirect("templateName || pathName");
- Andriuschain.doFilter
之前和之后可能会进行编码。 - YoYoString 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);
}
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文档
尝试并检查您的ServletResponse response
是否是HttpServletResponse
的实例,如下所示:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
。 - To Kra您的响应对象被声明为ServletResponse
。要使用sendRedirect()
方法,您需要将其转换为HttpServletResponse
。这是一个扩展接口,添加了与HTTP协议相关的方法。
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
- To Kra