如何在 shiro.ini 中定义初始上下文工厂?

How do I define the initial context factory in shiro.ini?

在我的 Shiro 应用程序中,我使用 JndiRealmFactory 来定义我的领域。我这样注册我的领域:

Hashtable<String, String> args = new Hashtable<>();
args.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
InitialContext ctx = new InitialContext(args);
ctx.bind("realms/MyRealm", myRealm);

但是,四郎找不到realms/MyRealm。我认为原因是,我需要定义 JndiRealmFactory 的 jndiEnvironment,它包含 Context.INITIAL_CONTEXT_FACTORY 属性。但是,我不知道如何在 shiro.ini:

中设置这个 属性
realmFactory.jndiEnvironment = ?

我是 运行 我在 TomEE 上的应用程序。

我目前的 shiro.ini 看起来像这样:

realmFactory = org.apache.shiro.realm.jndi.JndiRealmFactory
realmFactory.jndiNames = realms/MyRealm

您不应该在运行时绑定 EE 上下文中的任何内容。您可以在 tomcat 中将其定义为资源或 resources.xml(特定于 tomee),然后只需使用标准查找来读取值(没有传递给 InitialContext 的特殊属性。