Apache Shiro Multirealm身份验证+找出哪个领域进行了身份验证

时间:2016-01-04 15:25:32

标签: shiro

我有两个可能的领域,可以在我的网络应用程序中验证我的用户。

这里有几行来自我的shiro.ini:

securityManager.realms = $ldapRealm, $saltedJdbcRealm
strategy = org.apache.shiro.authc.pam.FirstSuccessfulStrategy
securityManager.authenticator.authenticationStrategy = $strategy

身份验证适用于两个领域,FirstSuccessfulStrategy也可以正常工作。

在我executeLogin()方法中的自定义AuthenticationFilter中,我有以下代码进行登录:

Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
currentUser.login(token);

如何在执行.login()方法后确定哪个域可用于身份验证?

如果用户通过LDAP Realm进行了身份验证,我想从LDAP获取有关该用户的更多信息。

有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

Subject subj = SecurityUtils.getSubject()
SimplePrincipalCollection spc = (SimplePrincipalCollection) subj.getPrincipals();
Set<String> realmNames = spc.getRealmNames();

realmNames变量应该包含一个元素,即对用户进行身份验证的领域。

如果您的领域实现是标准实现,那么将使用成功验证用户的领域名称创建在用户通过身份验证时创建的SimpleAuthenticationInfo