亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一次每次請求過濾器無法設置不同于 404 的錯誤代碼

一次每次請求過濾器無法設置不同于 404 的錯誤代碼

qq_遁去的一_1 2022-09-14 15:32:51
我有一個彈簧應用程序(不使用彈簧啟動)部署到雄貓我嘗試在給定條件下使用 返回特定URL上的錯誤401() 。HttpServletResponse.SC_UNAUTHORIZEDOncePerRequestFilter但我不斷得到 找不到錯誤:Response code: 404我的過濾器(刪除條件):@Componentpublic class MyFilter extends OncePerRequestFilter {    private static final Logger logger = Logger.getLogger(MyFilter.class);    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {            response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Not autorized");                       response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);            try {                PrintWriter out = response.getWriter();                out.write(""); // Empty                out.flush();            } catch (IOException e) {                logger.error("error filtering", e);            }            return; // stop chain    }    }我嘗試使用與以前類似答案類似的代碼我相信你可以響應.send內部的錯誤做過濾方法。編輯如果我只是拋出一個異常,我得到一個通用錯誤代碼500Response code: 500編輯 2我正在添加過濾器內部的方法覆蓋onStartupWebApplicationInitializerFilterRegistration myFilter = servletContext.addFilter("myFilter ", MyFilter.class);myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint/*");編輯 3此外,我的過濾器及其軟件包包含在組件掃描中@Componenet@ComponentScan(basePackages = { "my.parent.pacakge"})
查看完整描述

2 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

我嘗試了你的代碼,它的工作原理。成功返回了不同的錯誤代碼。雖然,我想指出幾件事 -

  1. 該方法將響應發送到客戶端,并清除響應緩沖區。因此,您之后將其寫入響應的任何內容都毫無用處。sendError()

  2. 呼叫也毫無用處。當您調用 時,HTTP 響應和 HTTP 響應代碼已在上一行中發送到客戶端。setStatus()sendError()


現在,這是我的假設,為什么你的代碼不適合你,但它對我有用 -

您可能獲得 HTTP 404 的原因是您的 API 不存在。這可能是由于拼寫錯誤,也可能是由于一個簡單的無知,例如調用您的API命名,即帶有額外的尾隨正斜杠。我相信您的過濾器正在成功執行,您必須在那里做一些有用的事情,而不是您在問題中解釋的示例代碼。/foo/bar/foo/bar/sendError()

此外,在篩選器中引發異常時,控件不會到達 API,并且不會發生 API 查找。因此,由于未處理的異常而不是 HTTP 404,默認的 HTTP 500 響應將發送到客戶端。


查看完整回答
反對 回復 2022-09-14
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

僅當在以下時間之后執行時,它才會按預期返回 401setStatusout.write


PrintWriter out = response.getWriter();

out.write("");

response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);


查看完整回答
反對 回復 2022-09-14
  • 2 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號