希望使用不同的数据源配置共享tomcat域



我有两组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)元素中。如果您的usacanada应用程序运行在不同的Host s中,这可能是一个解决方案。

如果它们在相同的Host中,则必须在usa应用程序的每个Context中放置Realm标签,并让canada应用程序使用默认的Realm(嵌套在Engine标签中),反之亦然。

从文档中,Realm配置HOW-TO,配置Realm:

元素可以嵌套在下列任意元素中容器元素。Realm元素的位置有一个直接的对该领域的"范围"的影响(即哪些web应用程序将)共享相同的身份验证信息):

[…]

  • 元素内部-这个Realm将被这个虚拟主机的所有web应用程序共享,除非它被一个Realm覆盖元素嵌套在从属元素中。
  • 元素内部-此Realm将仅用于此web应用程序。
这里有一个类似的问题,在答案中有一个例子:我如何限制用户只能访问他们自己的管理器?

最新更新