Java ApacheShiro:动态启用/禁用领域

Java ApacheShiro:动态启用/禁用领域,java,shiro,Java,Shiro,JavaEE8Web应用程序可以有几个领域:一个始终为内部用户存储启用,另一个为auth/author对抗AD启用(例如) 因此,领域列表如下所示: [main] ... localUserRealm = local.LocalUserRealm ... adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm ... securityManager.realms = $localUserRealm, $adRea

JavaEE8Web应用程序可以有几个领域:一个始终为内部用户存储启用,另一个为auth/author对抗AD启用(例如)

因此,领域列表如下所示:

[main]
...
localUserRealm = local.LocalUserRealm
...
adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
...
securityManager.realms = $localUserRealm, $adRealm 
  • 领域1:LocalUserRealm扩展了AuthorizationRealm
  • 领域2:ActiveDirectoryRealm(可选,应通过提供必要的设置通过应用程序启用和配置:ldap url、usr、pwd等)
  • 当前,
    shiro.ini
    如下所示:

    [main]
    ...
    localUserRealm = local.LocalUserRealm
    ...
    adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
    ...
    securityManager.realms = $localUserRealm, $adRealm 
    
    问题:按下应用程序中的“启用广告集成”/“禁用广告集成”等按钮后,动态启用/禁用可选的
    adRealm
    的最佳方式是什么

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

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

    谢谢你在这里的回答!;)这有点旧,但由于我遇到了相同的问题,我将添加一个问题,要使其正常工作,您需要将
    SecurityUtils.getSecurityManager()
    SecurityManager
    转换为
    RealmSecurityManager