我有两组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" />
我的"usa"应用程序都想与这个数据源共享一个SingleSignOn,而我的"canada"应用程序想使用SingleSignOn,但使用不同的数据源。(如jdbc/canada
)
是否有一种方法可以把这个顶级引擎容器分成两个部分,或者配置应用程序来覆盖dataSourceName
?tomcat文档说我可以只定义一个"Engine"部分。
但是两组web应用程序都想使用不同的数据源来连接它
您可以将Realm
放在Host
(甚至Context
)元素中。如果您的usa和canada应用程序运行在不同的Host
s中,这可能是一个解决方案。
如果它们在相同的Host
中,则必须在usa应用程序的每个Context
中放置Realm
标签,并让canada应用程序使用默认的Realm(嵌套在Engine
标签中),反之亦然。
从文档中,Realm配置HOW-TO,配置Realm:
这里有一个类似的问题,在答案中有一个例子:我如何限制用户只能访问他们自己的管理器?元素可以嵌套在下列任意元素中容器元素。Realm元素的位置有一个直接的对该领域的"范围"的影响(即哪些web应用程序将)共享相同的身份验证信息):
[…]
- 元素内部-这个Realm将被这个虚拟主机的所有web应用程序共享,除非它被一个Realm覆盖元素嵌套在从属元素中。
- 元素内部-此Realm将仅用于此web应用程序。