2 回答

TA貢獻1856條經驗 獲得超17個贊
我嘗試了你的代碼,它的工作原理。成功返回了不同的錯誤代碼。雖然,我想指出幾件事 -
該方法將響應發送到客戶端,并清除響應緩沖區。因此,您之后將其寫入響應的任何內容都毫無用處。
sendError()
呼叫也毫無用處。當您調用 時,HTTP 響應和 HTTP 響應代碼已在上一行中發送到客戶端。
setStatus()
sendError()
現在,這是我的假設,為什么你的代碼不適合你,但它對我有用 -
您可能獲得 HTTP 404 的原因是您的 API 不存在。這可能是由于拼寫錯誤,也可能是由于一個簡單的無知,例如調用您的API命名,即帶有額外的尾隨正斜杠。我相信您的過濾器正在成功執行,您必須在那里做一些有用的事情,而不是您在問題中解釋的示例代碼。/foo/bar
/foo/bar/
sendError()
此外,在篩選器中引發異常時,控件不會到達 API,并且不會發生 API 查找。因此,由于未處理的異常而不是 HTTP 404,默認的 HTTP 500 響應將發送到客戶端。

TA貢獻1864條經驗 獲得超6個贊
僅當在以下時間之后執行時,它才會按預期返回 401setStatusout.write
PrintWriter out = response.getWriter();
out.write("");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
添加回答
舉報