Authentication ApacheShiro-使用cn以外的属性进行身份验证?

Authentication ApacheShiro-使用cn以外的属性进行身份验证?,authentication,active-directory,shiro,Authentication,Active Directory,Shiro,我正试图在我们的项目中使用ApacheShiro,通过Active Directory域进行身份验证和授权。当我使用users CN属性进行身份验证时,它工作得很好。但是,我想使用另一个唯一的属性进行登录。可以将shiro配置为这样做吗 这是我的shiro.ini文件: [main] shiro.loginUrl = /login.jsp activeDirectoryRealm = org.apache.shiro.realm.activedirectory.Activ

我正试图在我们的项目中使用ApacheShiro,通过Active Directory域进行身份验证和授权。当我使用users CN属性进行身份验证时,它工作得很好。但是,我想使用另一个唯一的属性进行登录。可以将shiro配置为这样做吗

这是我的shiro.ini文件:

    [main]
    shiro.loginUrl = /login.jsp
    activeDirectoryRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
    activeDirectoryRealm.systemUsername = admin
    activeDirectoryRealm.systemPassword = secret
    activeDirectoryRealm.searchBase = DC=company,DC=private
    activeDirectoryRealm.url = ldap://url:389
及登入密码:

public void登录(字符串uname、字符串pwd、布尔记忆){
Factory ldapFactory=new-InSecurityManager工厂(“类路径:shiro.ini”);
SecurityManager sManager=ldapFactory.getInstance();
SecurityUtils.setSecurityManager(sManager);
Subject currentUser=SecurityUtils.getSubject();
如果(!currentUser.isAuthenticated()){
uname=“CN=“+uname+”,OU=Users”;
UsernamePasswordToken=新的UsernamePasswordToken(uname,pwd);
token.setRememberMe(rememberMe);
试一试{
currentUser.login(令牌);
}捕获(UnknownAccountException ex){
logger.info(“未知用户”);
}捕获(不正确的凭证异常ex){
logger.info(“不正确的凭证”);
}捕获(锁定帐户例外){
logger.info(“帐户已锁定”);
}捕获(AuthenticationException ex){
例如printStackTrace();
}
}
}
如果我换线

uname=“CN=“+uname+”,OU=Users”;
以下

uname=“myCustomAttribute=“+uname+”,OU=Users”;
然后尝试用它登录,我得到了

    javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1 ]

谢谢你的回答。

好的,我通过创建一个自定义的MyJNDILDAPREAM扩展JNDILDAPREAM并重写方法来实现这一点

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token){}
但如果你们有更好的解决方案,我仍然欢迎你们的回答