Apache Shiro:动态 enable/disable 领域

Apache Shiro: dynamically enable/disable realm

Java EE 8 Web 应用程序可以有多个领域:一个始终启用内部用户存储,另一个 auth/author 针对 AD(例如)。

因此,领域列表如下:

  1. 领域 1:LocalUserRealm 扩展了 AuthorizingRealm
  2. 领域 2:ActiveDirectoryRealm(可选,应通过提供所需设置通过应用启用和配置:ldap url、usr、pwd 等)

目前,shiro.ini 如下所示:

[main]
...
localUserRealm = local.LocalUserRealm
...
adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
...
securityManager.realms = $localUserRealm, $adRealm 

问题:在应用程序中按下 "enable AD integration" / "disable AD integration" 等按钮后,即时启用/禁用可选 adRealm 的最佳方法是什么?

  1. 在运行时通过 SecurityUtils.getSecurityManager().setRealms(realmsList) 添加领域是否有效?
  2. 禁用/销毁领域的最佳方法是什么(或者通过排除禁用的领域再次使用 SecurityUtils.getSecurityManager().setRealms(realmsList))?

您可以在替换它们之前调用 getRealms()(如上所列),获取列表的增量。呼叫setRealms(newList)。然后遍历增量并检查 Realm 是否为 Destroyable 如果是,则调用 destroy()