From 720fee695ada88f86914bb6c887c309ba54e6116 Mon Sep 17 00:00:00 2001 From: jomu Date: Thu, 11 Aug 2016 16:16:27 +0000 Subject: [PATCH] added AD realm accepting user name only (by extending domain name automatically) --- .../util/UserNameActiveDirectoryRealm.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 account/src/main/java/de/muehlencord/shared/account/util/UserNameActiveDirectoryRealm.java diff --git a/account/src/main/java/de/muehlencord/shared/account/util/UserNameActiveDirectoryRealm.java b/account/src/main/java/de/muehlencord/shared/account/util/UserNameActiveDirectoryRealm.java new file mode 100644 index 0000000..4145d0f --- /dev/null +++ b/account/src/main/java/de/muehlencord/shared/account/util/UserNameActiveDirectoryRealm.java @@ -0,0 +1,38 @@ +package de.muehlencord.shared.account.util; + +import javax.naming.NamingException; +import javax.naming.ldap.LdapContext; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm; +import org.apache.shiro.realm.ldap.LdapContextFactory; +import org.apache.shiro.realm.ldap.LdapUtils; + +/** + * + * @author joern.muehlencord + */ +public class UserNameActiveDirectoryRealm extends ActiveDirectoryRealm { + + @Override + protected AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken token, LdapContextFactory ldapContextFactory) throws NamingException { + + UsernamePasswordToken upToken = (UsernamePasswordToken) token; + // Binds using the username and password provided by the user. + LdapContext ctx = null; + try { + String userName = upToken.getUsername(); + if (principalSuffix != null) { + if (!userName.contains(principalSuffix)) + userName += principalSuffix; + } + + ctx = ldapContextFactory.getLdapContext(userName, String.valueOf(upToken.getPassword())); + } finally { + LdapUtils.closeContext(ctx); + } + + return buildAuthenticationInfo(upToken.getUsername(), upToken.getPassword()); + } +}