首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SpringMVC sendRedirect 後報「Cannot call sendRedirect after response committed」:漏寫 return

     編輯:程式設計綜合問答

典型錯誤代碼


@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    if (!authenticated) {
        response.sendRedirect("/login");
        // 缺少 return false; → 繼續執行後續代碼,可能再次提交響應
    }
    return true;
}

修復


if (!authenticated) {
    response.sendRedirect("/login");
    return false; // 關鍵:攔截器鏈終止,防止二次提交
}

原理

  • sendRedirect 設置狀態碼 302 + Location 頭,不立即提交響應體。
  • 若方法繼續執行,Controller 可能渲染視圖、寫入響應體 → 響應已提交。
  • 再次調用 sendRedirect 或 forward 即拋異常。

檢查清單

  1. 攔截器 preHandle 重定向後 必須 return false。
  2. Controller 方法重定向後 return null 或 void 方法直接 return。
  3. 檢查是否有 Filter、Aspect 在重定向後繼續寫響應。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved