最近用shiro發生一個問題,那就是用戶登錄後,管理員禁用了該用戶,該用戶再次登錄時不執行Realm中的doGetAuthenticationInfo方法,導致禁用失效,但是重啓系統可以生效,猜測是緩存導致了該問題。
debug跟蹤了下源碼。
如圖,第二次登錄info不爲空,使用了緩存,沒有調用Realm的認證方法
但是我明明清除認證緩存了,再次debug下Realm的clearCachedAuthenticationIfo清除認證緩存方法,發現原來是key值不對,我清除的時候使用的是對象作爲key,而緩存用的是username也就是對象中的一個屬性作爲key,如下圖
如上圖,問題解決