簡體   English   中英

跨多個Web應用程序使用dao的shiro會話存儲

[英]shiro session store using dao across multiple web applications

Shiro的SessionDAO用於將會話存儲在db(作為Blob)中。 此會話可跨多個Web應用程序使用(啟用了Shiro)現在問題是每個Web應用程序都試圖在會話中設置屬性(自定義類)。 當嘗試在其他Web應用程序中反序列化時,它會拋出ClassDefNotFoundException,因為它不存在。 有什么辦法可以解決這個問題? 理想的方法應該是什么?

將單個會話分成多個會話。 從一個可全局訪問的會話開始,該會話包含用戶的主體和使用同一會話的所有其他Web應用程序的應用程序特定鍵(僅此而已)。 然后,當訪問隔離的Web應用程序時,在緩存中創建一個新的“會話”,並將其密鑰放入全局會話中。 然后,當用戶訪問隔離的Web應用程序時,過濾器應從全局會話中檢索密鑰,並將隔離的Web應用程序特定會話綁定到當前線程上下文(然后在執行完成后將其刪除)。

main-user-session
|
+--user-principal
|
+--app1-user-session-key
|
+--app2-user-session-key


void filter (HttpRequest req, HttpResponse resp) {
    var app1key = sessionCache.get("main-user-session-key")
                              .get("app1-user-session-key");
    Session app1Sess = sessionCache.get(app1key);
    threadContext.bind("SESSION", app1Sess);
    try {
      execute(request, response);
    } finally (Exception e) {
      threadContext.unbind("SESSION");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM