[英]How to redirect in a servlet filter?
I'm trying to find a method to redirect my request from a filter to the login page but I don't know how to redirect from servlet.我试图找到一种方法将我的请求从过滤器重定向到登录页面,但我不知道如何从 servlet 重定向。 I've searched but what I find is
sendRedirect()
method.我已经搜索过,但我发现的是
sendRedirect()
方法。 I can't find this method on my response object in the filter.我在过滤器中的响应对象上找不到此方法。 What's the cause?
原因是什么? How can I solve this?
我该如何解决这个问题?
In Filter the response is of ServletResponse
rather than HttpServletResponse
.在 Filter 中,响应是
ServletResponse
而不是HttpServletResponse
。 Hence do the cast to HttpServletResponse
.因此对
HttpServletResponse
。
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
If using a context path:如果使用上下文路径:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
Also don't forget to call return;
也不要忘记调用
return;
at the end.在末尾。
I'm trying to find a method to redirect my request from filter to login page
我正在尝试找到一种方法将我的请求从过滤器重定向到登录页面
Don't别
You just invoke你只要调用
chain.doFilter(request, response);
from filter and the normal flow will go ahead.来自过滤器,正常流程将继续。
I don't know how to redirect from servlet
我不知道如何从 servlet 重定向
You can use您可以使用
response.sendRedirect(url);
to redirect from servlet从servlet重定向
If you also want to keep hash and get parameter, you can do something like this (fill redirectMap at 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);
}
Try and check of your ServletResponse response
is an instanceof HttpServletResponse
like so:尝试检查您的
ServletResponse response
是instanceof HttpServletResponse
一个instanceof HttpServletResponse
如下所示:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
Your response object is declared as a ServletResponse
.您的响应对象被声明为
ServletResponse
。 To use the sendRedirect()
method, you have to cast it to HttpServletResponse
.要使用
sendRedirect()
方法,您必须将其转换为HttpServletResponse
。 This is an extended interface that adds methods related to the HTTP protocol.这是一个扩展接口,添加了与 HTTP 协议相关的方法。
why are you using response object .你为什么使用响应对象。 it is a ServletResponse Object ,it does not provide sendRedirect() method .
它是一个 ServletResponse 对象,它不提供 sendRedirect() 方法。 instead use request object of ServletRequest to forward the request .
而是使用 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.