想要使用不同的数据源配置共享的tomcat域

时间:2011-10-25 15:54:29

标签: tomcat single-sign-on tomcat5.5

我有两组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应用程序都希望使用不同的数据源来连接它。

1 个答案:

答案 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?