单独的容器会话和Shiro会话?

问题描述

我们使用Apache Shiro为在一个Tomcat实例中运行的4个应用程序提供安全性。它们作为4个WAR部署,所有Shiro配置和安全性均位于第5个WAR中。

为了在这些应用程序之间提供SSO,我们已将ehCache配置为在所有5个Web应用程序之间共享会话(最初的意图是使用多个容器,但这从未发生)。

我们面临的问题是,在跨应用程序共享会话时,我们还共享了放置在会话中的所有对象数据。这是一个问题,因为这些应用程序具有不同的依赖关系,因此具有不同的类路径,从而导致ClassNotFoundExceptions。我想我说的很对,认情况下,在Tomcat容器中,每个WAR都将有一个单独的会话,因此这不是问题,但是那样我们将无法共享Shiro用户数据!

所以我的问题是:是否可以有单独的Shiro和Container会话?这将允许期望的结果,即Shiro使用的任何登录数据都将放入“ Shiro”会话中并在多个应用程序之间共享,而Container会话对于每个应用程序都是独立的,因此不会在它们之间共享数据。 / p>

解决方法

Shiro需要在每个容器中运行。然后,这些容器需要共享Shiro会话。 https://shiro.apache.org/session-management.html#session-storage

您可以使用容器的会话共享功能或使用Shiro的会话共享功能。