如何在过滤器中执行重定向到调用此过滤器的servlet或jsp。实际上,我想检查用户是否还没有看到某些内容,然后,在尝试获得forbbiden资源时,用户将留在他试图获取该资源的页面。
答案 0 :(得分:7)
在doFilter()
方法中,您需要将获得的ServletResponse
参数强制转换为HttpServletResponse
,然后在其上调用sendRedirect()
方法。发起请求的页面可以通过referer
请求标头获取(是的,带有legendaric拼写错误),HttpServletRequest#getHeader()
从ServletRequest
参数中转换后可以获取Our servlet-filters
wiki page。
if (userHasPermission) {
chain.doFilter(request, response);
} else {
String referrer = ((HttpServletRequest) request).getHeader("referer");
((HttpServletResponse) response).sendRedirect(referrer);
}
请注意,引荐来源是客户端控制的值,因此可能会被欺骗甚至删除。您希望对获得的值添加条件检查,当缺席或无效时,重定向到主页面或其他地方。