最近項目中出現一些問題,以前可能不大關注,但是問題是實實在在存在的。

系統重新開機使用者登陸或者退出報錯:disk write of 407a1347-c2c6-434e-89e3-365aa277497c failed
這個問題,并不是經常出現,看詳細錯誤資訊,應該是資料 list或者map序列化的問題。看了一下實體類都實作了序列化。
突然想起,以前是沒有這個問題的,自從更新了ehcache的jar包,這個問題時常出現。目前使用的是ehcache2.10.0,随後版本降級為ehcache2.6.9,重新開機以後再沒出現過這個問題。
使用者退出無法請求到logout.action,導緻盡管session已經清理,但是使用者緩存資訊還是實實在在存在的。
如果把logout 改為user或者anon,會報以下錯誤:
字面意思是,找不到session,的确f12 sid已經不見了,shiro在做跳轉的時候就報這個錯誤(目前不清楚原因,但是後面有解決方案)
部分代碼:
仔細膜拜一下源代碼,退出操作是走logoutfilter過濾的。
注意:最後的return false,傳回false表示不執行後續的過濾器,直接傳回跳轉到登入頁面。是以也就不可能再請求到loginaction_logout.action,也就不會清空使用者緩存資訊了。
重寫logoutfilter:
配置檔案定義:
如果存在多realm,可能會傳回不同的登陸頁,這裡可以把return false 改為 return true 執行後續的過濾器,自定義action重定向不同的頁面。
好,到這兩個問題都解決了。第二個問題,基本就是由于未了解shiro的原理導緻的,是以大家使用開源架構的時候一定要弄清楚其原理,這樣才可以精确的定位問題。