Authentication ApacheShiro-使用cn以外的属性进行身份验证?
我正试图在我们的项目中使用ApacheShiro,通过Active Directory域进行身份验证和授权。当我使用users CN属性进行身份验证时,它工作得很好。但是,我想使用另一个唯一的属性进行登录。可以将shiro配置为这样做吗 这是我的shiro.ini文件: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
[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){}
但如果你们有更好的解决方案,我仍然欢迎你们的回答