【问题标题】:Apache Shiro: dynamically enable/disable realmApache Shiro:动态启用/禁用领域
【发布时间】:2018-03-14 08:45:48
【问题描述】:

Java EE 8 Web 应用程序可以有多个领域:一个始终启用内部用户存储,另一个用于针对 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 

问题:按下应用程序中的“启用 AD 集成”/“禁用 AD 集成”等按钮后,即时启用/禁用可选 adRealm 的最佳方法是什么?

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

【问题讨论】:

    标签: java shiro


    【解决方案1】:

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

    【讨论】:

    • 也感谢您在这里回答! ;)
    • 这有点老了,但由于我遇到了同样的问题,我会补充一点,要使其正常工作,您需要将 SecurityUtils.getSecurityManager()SecurityManager 转换为 RealmSecurityManager,@987654321 @
    猜你喜欢
    • 2016-08-13
    • 2015-05-31
    • 1970-01-01
    • 2012-11-06
    • 2018-01-25
    • 2012-01-12
    • 2018-04-03
    • 2011-06-18
    • 2013-10-08
    相关资源
    最近更新 更多