Apache Shiro:动态 enable/disable 领域
Apache Shiro: dynamically enable/disable realm
Java EE 8 Web 应用程序可以有多个领域:一个始终启用内部用户存储,另一个 auth/author 针对 AD(例如)。
因此,领域列表如下:
- 领域 1:LocalUserRealm 扩展了 AuthorizingRealm
- 领域 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
的最佳方法是什么?
- 在运行时通过
SecurityUtils.getSecurityManager().setRealms(realmsList)
添加领域是否有效?
- 禁用/销毁领域的最佳方法是什么(或者通过排除禁用的领域再次使用
SecurityUtils.getSecurityManager().setRealms(realmsList)
)?
您可以在替换它们之前调用 getRealms()
(如上所列),获取列表的增量。呼叫setRealms(newList)
。然后遍历增量并检查 Realm 是否为 Destroyable
如果是,则调用 destroy()
。
Java EE 8 Web 应用程序可以有多个领域:一个始终启用内部用户存储,另一个 auth/author 针对 AD(例如)。
因此,领域列表如下:
- 领域 1:LocalUserRealm 扩展了 AuthorizingRealm
- 领域 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
的最佳方法是什么?
- 在运行时通过
SecurityUtils.getSecurityManager().setRealms(realmsList)
添加领域是否有效? - 禁用/销毁领域的最佳方法是什么(或者通过排除禁用的领域再次使用
SecurityUtils.getSecurityManager().setRealms(realmsList)
)?
您可以在替换它们之前调用 getRealms()
(如上所列),获取列表的增量。呼叫setRealms(newList)
。然后遍历增量并检查 Realm 是否为 Destroyable
如果是,则调用 destroy()
。