我有两组Web应用程序都在同一个Tomcat 5.5服务器上运行。
我在server.xml
中定义了一个共同的域:
<!-- Define the top level container in our container hierarchy -->
<Engine defaultHost="localhost" name="Catalina">
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<Realm
className="com.key.portal.common.realm.PortalDataSourceRealm"
debug="0"
dataSourceName="jdbc/usa"
userTable="user_info"
userNameCol="username"
userIdCol="username"
userCredCol="password"
userInactiveCol="inactive"
userRoleTable="user_role"
roleNameCol="role" />
我的“美国”应用程序都希望与此数据源共享SingleSignOn,而我的“加拿大”应用程序使用singlesignon,但使用不同的数据源。 (例如jdbc/canada
)
有没有办法可以将这个顶级引擎容器分成两个部分,或者配置应用程序来覆盖dataSourceName
? tomcat文档说我可以定义一个“引擎”部分。
但是这两组Web应用程序都希望使用不同的数据源来连接它。
答案 0 :(得分:0)
您可以将Realm
放在Host
(或甚至在Context
)元素内。如果您的 usa 和加拿大应用程序在不同的Host
中运行,则可能是一种解决方案。
如果它们位于同一个Host
内,您必须在{em> usa 应用程序的每个Realm
内添加Context
标记,并让加拿大应用程序使用默认的Realm(嵌套在Engine
标记中),反之亦然。
从文档中Realm Configuration HOW-TO, Configuring a Realm:
元素可以嵌套在以下任何一个中 容器元素。 Realm元素的位置有直接的 影响该领域的“范围”(即哪些网络应用程序将 共享相同的身份验证信息):
[...]
- 在元素内部 - 此Realm将在此虚拟主机的所有Web应用程序之间共享,除非它被一个领域覆盖 元素嵌套在从属元素中。
- 在元素内部 - 此域将仅用于此Web应用程序。
这是一个类似的问题,答案中有一个例子:how can I restrict users to access ONLY their own manager?