我看过一些帖子说在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?
}
}
}
答案 0 :(得分:7)
我对servlet知之甚少,但return
语句实际上没用,将被编译器删除。
javadoc表示“使用此方法后,应认为响应已提交,不应写入。”我猜你指的是这个。
想象一下这个片段:
if( anyErrorCondition(request) ) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
}
// Further processing
在这种情况下,您应该在调用return
后使用sendError
语句,因为您希望阻止进一步处理。
这不适用于您在发送错误代码后未处理请求但将到达方法结尾并返回的示例。
总结:不,此处您不需要return
声明,只要您可以保证在致电sendError
后不会处理该请求。