【问题标题】:shiro session store using dao across multiple web applications跨多个 Web 应用程序使用 dao 的 shiro 会话存储
【发布时间】:2015-01-19 16:42:54
【问题描述】:

Shiro 的 SessionDAO 用于将会话存储在数据库中(作为 blob)。 此会话用于多个 Web 应用程序(启用 shiro) 现在的问题是每个 Web 应用程序都试图在会话中设置属性(自定义类)。 当试图在其他 Web 应用程序中反序列化时,它会抛出 ClassDefNotFoundException 因为它不存在。 有什么办法可以解决这个问题吗? 理想的方法应该是什么?

【问题讨论】:

    标签: java session serialization shiro


    【解决方案1】:

    将您的单个会话分成多个会话。从一个可全局访问的会话开始,该会话包含用户的主体和所有其他使用同一会话的 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");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 2022-01-21
      • 2012-01-02
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      相关资源
      最近更新 更多