我想知道是否可以使用基于应用程序context.xml中定义的org.apache.catalina.users.MemoryUserDatabaseFactory的UserDatabase
如果我在tomcat-s server.xml中将此资源定义为全局,它似乎没问题,但如果我在应用程序的context.xml中定义相同的资源,则启动应用程序时似乎存在问题。
原始的UserDatabase资源保持不变,我想阻止更改server.xml或覆盖任何现有的tomcat conf文件,因为最后这是特定于应用程序的资源,因此它应该仅针对应用程序定义,而不是全局定义服务器。这甚至可以吗?
context.xml中的资源定义:
<Resource name="PeUserDatabase"
auth="Container"
description="Custom In memory user database"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/pe-tomcat-users.xml"
type="org.apache.catalina.UserDatabase"/>
在应用程序context.xml中使用资源:
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="PeUserDatabase"/>
</Realm>
异常:
SEVERE: Failed to start "org.apache.catalina.realm.UserDatabaseRealm/1.0" realm
org.apache.catalina.LifecycleException: Failed to start component [Realm[UserDatabaseRealm]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.realm.CombinedRealm.startInternal(CombinedRealm.java:236)
at org.apache.catalina.realm.LockOutRealm.startInternal(LockOutRealm.java:120)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5517)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:712)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:2002)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: No UserDatabase component found under key PeUserDatabase
at org.apache.catalina.realm.UserDatabaseRealm.startInternal(UserDatabaseRealm.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 15 more
答案 0 :(得分:0)
你是否将override = true? 。以下是一个例子。
<Context antiJARLocking="true" override="true">
让我知道它是否有效
答案 1 :(得分:0)
好吧,似乎无法使用本地资源配置org.apache.catalina.realm.UserDatabaseRealm
。资源需要是全局的,也就是在server.xml中定义
围绕这种方式使用其他类型的领域,org.apache.catalina.realm.MemoryRealm
在我的情况下,权衡是这个领域在运行时是不可管理的,每次更改只有在重新启动后才可见。