我正在尝试在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标签包装资源以及是否存在同一错误。
我尝试将资源的验证属性更改为容器和应用程序,并获得相同的错误。
我想念什么?Google的所有帮助都大多是人们弄乱了他们的主要领域(我的很好)不试图配置第二个领域。
您可以使用org.apache.catalina.realm.CombinedRealm
。从tomcat文档中:
<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>
所以,我没有真正的答案,但是我会解释自己做了什么。
我无法获得第二个UserDatabaseRealm的工作,但我真的只需要两个领域进行测试,这与类型无关(最终,第二个领域是LDAP)。
所以我正在寻找可用的领域,并为我的次级测试领域选择了一个内存,它的工作原理。然后,我成为了LDAP领域,而且也很好。
所以,对那些实际需要两个UserDatabaseRealms的人,我没有解决方案。
注意:奇怪的是,UserDataBaseRealm使用JNDI,而Jndirealm用于LDAP(从我可以看出的是,JDNI不涉及)。我敢肯定这只是一些遗产命名问题,但这很困惑。