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

Tomcat ClassCastException: WebSession cannot cast to String 完整排查與修正指南

     編輯:程式設計綜合問答

錯誤堆疊核心訊息

java.lang.ClassCastException: com.sany.web.session.WebSession cannot be cast to java.lang.String
at com.sany.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:34)

錯誤程式碼片段(第 34 行附近)

logger.error((String)req.getSession().getAttribute("user"), ...); // 強制轉型導致異常

根本原因

Session 屬性 "user" 存放的是 WebSession 物件,程式碼卻直接 (String) 強制轉型,型別不符導致 ClassCastException。

修正方案

  1. 正確取得型別:
    Object userObj = req.getSession().getAttribute("user");
    String userStr = (userObj != null) ? userObj.toString() : "anonymous";
    // 或
    WebSession ws = (WebSession) userObj; // 若確定型別
    
  2. 檢查存入 Session 時的型別,確保前後端一致。
  3. 加入防禦性程式設計:使用 instanceof 或 Optional 避免 NPE/CCE。

最佳實務建議

  • 定義常數 SESSION_USER_KEY 避免字串拼寫錯誤。
  • 統一使用 DTO/VO 物件存入 Session,勿混用基本型別與物件。
  • 啟用編譯器警告 -Xlint:unchecked 提早發現型別轉換風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved