需要帮助在Tomcat中设置多个领域

时间:2012-10-19 12:27:47

标签: java tomcat jdbcrealm

我正在尝试在tomcat中设置两个领域,并且由于某种原因它不会让我。我想使用标准的UserDatabaseRealm(conf / tomcat-users.xml)来执行管理工作(比如部署webapps),但我想要一个自定义域来为特定的webapp进行身份验证。

所以,我尝试将其放在我的webapp上下文中:

<Context>
  <GlobalNamingResources>
    <Resource name="CustomDatabase" auth="Container"
      type="org.apache.catalina.UserDatabase"
      description="User database that can be updated and saved"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
      pathname="/usr/java/apache-tomcat-6.0.35/conf/tomcat-users.xml" 
    />
  </GlobalNamingResources>
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
    resourceName="CustomDatabase"
   />
</Context>

这只是server.xml中的一个副本,只有一些更改:

  • 该名称从UserDatabase更改为CustomDatabase。

  • 路径名是绝对路径名(和我用于主域的路径名一样)。

我总是得到同样的错误:

LifecycleException:  No UserDatabase component found under key CustomDatabase

我不知道它告诉我的是什么。它在谈论什么组成部分?

除了上面的上下文,我还尝试了其他一些事情,但它总是会出现同样的错误:

  • 我尝试使用GlobalNamingResources标记包装资源以及是否存在相同的错误。

  • 我尝试将资源的auth属性更改为Container和Application并获得相同的错误。

我错过了什么?谷歌的所有帮助主要是人们弄乱他们的主要领域(我的很好),而不是试图配置第二个领域。

2 个答案:

答案 0 :(得分:7)

您可以使用org.apache.catalina.realm.CombinedRealm。来自Tomcat documentation

<Realm className="org.apache.catalina.realm.CombinedRealm" >
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
         resourceName="UserDatabase"/>
  <Realm className="org.apache.catalina.realm.DataSourceRealm"
         dataSourceName="jdbc/authority"
         userTable="users" userNameCol="user_name" userCredCol="user_pass"
         userRoleTable="user_roles" roleNameCol="role_name"/>
</Realm>

答案 1 :(得分:1)

所以,我没有真正的答案,但我会解释我做了什么。

我无法使第二个UserDatabaseRealm工作,但我真的只需要两个领域进行测试,并且它与类型无关(最终,第二个领域将是LDAP)。

因此,我正在查看可用的领域,并为我的辅助测试领域选择了一个MemoryRealm,它的工作原理应该如此。然后我把它变成了一个LDAP领域,并且工作正常。

所以,对于那些实际需要两个UserDatabaseRealms的人,很抱歉,我没有适合您的解决方案。

注意:奇怪的是UserDatabaseRealm使用JNDI而JNDIRealm用于LDAP(从我可以看出,JDNI不涉及)。我确信这只是一些传统的命名问题,但它令人困惑。