2016-09-27 158 views
0

我們已經使用Apache Shiro一段時間了,沒有任何問題,但最近已經注意到用戶正在獲取以下內容錯誤,當他們嘗試登錄,或只是在他們退出我們的應用程序:org.apache.shiro.session.mgt.DelegatingSession實現要求SessionKey參數返回一個非空的sessionId

java.lang.IllegalArgumentException異常:該org.apache.shiro.session.mgt.DelegatingSession實現要求SessionKey參數返回一個非空的sessionId以支持Session.getId()調用。

這可能是什麼原因造成的?

回答

1

發現問題正是錯誤信息所述 - 我們在會話數據中缺少「id」字段。

這是怎麼發生的?我們有多個應用程序讀取和寫出會話數據,這些數據存儲在Redis中以支持單點登錄。

寫入此商店的應用程序之一是將我們的會話數據寫爲json,而不具有「id」屬性,該id屬性對應於存儲在cookie中的會話標識。

因此,舉例來說,壞的會話數據是這樣的:

{ 
    "lastAccessTime": "2016-09-21T12:35:00.018526Z", 
    "startTimestamp": "2016-09-21T12:35:00.018526Z", 
    "timeout": 1800000 
} 

和良好的會話數據看起來是這樣的(至少) - 注意,有一個「id」屬性,會話ID匹配存儲在會話cookie中。

{ 
    "id": "f9b4f222-2660-4318-aae9-ba5f455d560", 
    "lastAccessTime": "2016-09-21T12:40:44.813222Z", 
    "startTimestamp": "2016-09-21T12:40:42.592Z", 
    "timeout": 1800000 
} 

所以我們所要做的只是讓該應用程序添加到「id」屬性中,並且它解決了問題!

相關問題