當前位置:編程學習大全網 - 網站源碼 - shiro的session信息放redis反序列化異常解決

shiro的session信息放redis反序列化異常解決

背景

在本地session移至redis存儲時,原本以為引入spring-session-data-redis依賴,配置RedisHttpSessionConfiguration,在web.xml中引入springSessionRepositoryFilter就結束了,沒想到遇到序列化相關的問題,具體就是只有getter,沒有setter。日誌如下:

分析

提示很清楚,就是shiro的SimplePrincipalCollection類中realmNames字段沒有setter方法,沒法反序列化。

來看看realmNames是什麽鬼,作為成熟的框架也偷懶不寫setter?仔細壹看,發現並不簡單。類裏面沒有realmNames,只有個getRealmNames方法。

原來是個假getter,是由其他字段動態生成的,如下:

看下redis裏面存的值

核心就是objectMapper.addMixIn()和objectMapper.setFilters()兩個方法

SimplePrincipalCollection是需要處理的類,IncludShiroFields就是壹個簡單的接口,如下:

通過上面的配置間接控制SimplePrincipalCollection類中必要字段的序列化,從而解決了問題。

ps :因為使用了註解,壹定要去掉objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false),不然配置不生效。

  • 上一篇:貝貝寵物醫院 巴丁店怎麽樣
  • 下一篇:ANDROID手機攝像頭 測心率 的原理是什麽?
  • copyright 2024編程學習大全網