在HttpServletResponse.sendError之后的过滤器中需要返回

时间:2014-01-18 18:33:40

标签: java

我看过一些帖子说在Servlet过滤器中的repsonse.sendError之后需要返回,是否需要?如果是这样,为什么?

public class AuthorizationSecurityFilter extends OncePerRequestFilter {
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
    boolean isAuth = //call to authenticate request
    if (isAuth) {
      chain.doFilter(request, response);
    } else {
      response.sendError(HttpServletResponse.SC_NOT_FOUND);
      return; //this needed?
    }
}

}

1 个答案:

答案 0 :(得分:7)

我对servlet知之甚少,但return语句实际上没用,将被编译器删除。

javadoc表示“使用此方法后,应认为响应已提交,不应写入。”我猜你指的是这个。

想象一下这个片段:

if( anyErrorCondition(request) ) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN);
}
// Further processing

在这种情况下,您应该在调用return后使用sendError语句,因为您希望阻止进一步处理。

这不适用于您在发送错误代码后未处理请求但将到达方法结尾并返回的示例。

总结:不,此处您不需要return声明,只要您可以保证在致电sendError后不会处理该请求。