2017-10-03 3 views
0

L'application Web Java EE 8 peut avoir plusieurs domaines: un qui est toujours activé pour le stockage interne de l'utilisateur, un autre pour l'auteur/auteur contre AD (par exemple).Apache Shiro: active/désactive dynamiquement le domaine

Ainsi, la liste des domaines est la suivante:

  1. Domaine 1: LocalUserRealm étend AuthorizingRealm
  2. Royaume 2: ActiveDirectoryRealm (en option, doit être activé et configuré via l'application en fournissant les paramètres requis: url ldap, usr, PWD, etc.)

Actuellement, shiro.ini se présente comme suit:

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

La question: quelle est la meilleure façon d'activer/désactiver le adRealm en option à la volée, après avoir appuyé sur des boutons dans l'application comme "activer AD intégration"/"désactiver AD intégration"?

  1. Est-il une approche valide pour ajouter un domaine pendant l'exécution via SecurityUtils.getSecurityManager().setRealms(realmsList)?
  2. Quel serait le meilleur moyen de désactiver/détruire le domaine (ou simplement utiliser SecurityUtils.getSecurityManager().setRealms(realmsList) en excluant les domaines désactivés)?

Répondre

1

Vous pouvez appeler getRealms() (comme indiqué ci-dessus) avant de les remplacer, obtenir le delta de la liste. Appelez setRealms(newList). Parcourez ensuite le delta et vérifiez si le royaume était Destroyable si c'est le cas, appelez le destroy().

+0

Merci d'avoir répondu ici aussi! ;) –