【问题标题】:Define custom UserDatabase resource inside application context.xml在应用程序 context.xml 中定义自定义 UserDatabase 资源
【发布时间】:2017-08-14 11:48:43
【问题描述】:

我想知道是否可以在应用程序 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"/>

application 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

【问题讨论】:

    标签: java xml tomcat


    【解决方案1】:

    您是否设置了 override=true? .下面是一个例子。

    &lt;Context antiJARLocking="true" override="true"&gt;

    让我知道它是否有效

    【讨论】:

      【解决方案2】:

      好吧,似乎无法使用本地资源配置org.apache.catalina.realm.UserDatabaseRealm。资源需要是全局的,也就是在 server.xml 中定义的

      解决这个问题的方法是使用其他类型的领域,在我的例子中是org.apache.catalina.realm.MemoryRealm,权衡是这个领域在运行时是不可管理的,并且每个更改只有在重新启动后才可见。

      【讨论】:

        猜你喜欢
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 2019-09-21
        相关资源
        最近更新 更多