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

JSP Filter 權限控制導致 404 錯誤:過濾器鏈調用邏輯與重定向路徑錯誤分析

     編輯:程式設計綜合問答

現象

配置 Filter 進行登錄權限控制後,訪問受保護頁面返回 404。

代碼問題分析

  1. Filter 鏈調用邏輯反轉:
// 原代碼
if (info.getName() != null) {
    filter.doFilter(request, response); // 放行
}
// 缺少 return,且未處理未登錄情況的重定向

正確邏輯:

UserInfo info = (UserInfo) session.getAttribute("userinfo");
if (info != null && info.getName() != null) {
    chain.doFilter(request, response); // 已登錄,繼續鏈
    return; // 重要:防止繼續執行後續重定向
}
// 未登錄
response.sendRedirect(request.getContextPath() + "/error.jsp"); // 使用上下文路徑
  1. 重定向路徑錯誤:../error.jsp 相對路徑在 Filter 中不可靠,應用 request.getContextPath() 構建絕對路徑。

web.xml 配置檢查

<filter>
  <filter-name>authFilter</filter-name>
  <filter-class>com.xxx.UserFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>authFilter</filter-name>
  <url-pattern>/show.jsp</url-pattern> <!-- 僅攔截需保護頁面 -->
</filter-mapping>

注意:login.jsp、error.jsp、**靜態資源** 不應被攔截,否則形成死循環或 404。

總結

  • Filter 中放行必須調用 chain.doFilter() 並 return。
  • 重定向使用絕對路徑 ${contextPath}/error.jsp。
  • 精確配置 url-pattern 僅攔截業務頁面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved