I already connect with AD from spring boot for login purposes but i can not mak searches. My configuration is
JavaScript
x
@Configuration
public class LdapTemplateConfig {
@Bean
public LdapTemplate ldapTemplate() {
LdapTemplate ldapTemplate = new LdapTemplate(ldapContextSource());
return ldapTemplate;
}
@Bean
public LdapContextSource ldapContextSource() {
String url = "ldap://127.0.0.1:389";
String base = "DC=demo1,DC=demo2,DC=demo3,DC=demo4";
LdapContextSource ldapContextSource = new LdapContextSource();
ldapContextSource.setUrl(url);
ldapContextSource.setUserDn(
"CN=User Name,OU=Common Users OU,OU=RDP enabled Users OU,OU=Operator Users OU,OU=Admin Users OU,DC=demo1,DC=demo2,DC=demo3,DC=demo4");
ldapContextSource.setPassword("password");
// ldapContextSource.setReferral("follow");
ldapContextSource.afterPropertiesSet();
return ldapContextSource;
}
}
@Service
public class LDAPServiceImpl {
@Autowired
private LdapTemplate ldapTemplate;
public void getUserDetails(String userName) {
if (null != ldapTemplate) {
List<String> vals = ldapTemplate.search(query().where("objectclass").is("person"),
new AttributesMapper<String>() {
@Override
public String mapFromAttributes(Attributes attributes) throws NamingException {
return attributes.get("sAMAccountName").get().toString();
}
});
for (String s : vals) {
log.info("attr : " + s);
}
} else {
log.info("Templates is null");
}
}
}
So, when i call the function getUserDetails() from controller it returns “Templates is null”
Advertisement
Answer
I solved the problem thanks all for your help
JavaScript
@Configuration
public class LdapTemplateConfig {
private final Logger log = LoggerFactory.getLogger(LdapTemplateConfig.class);
@Bean(name = "ldapTemplate")
// @Scope("singleton")
public LdapTemplate ldapTemplate(LdapContextSource contextSource) {
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
return ldapTemplate;
}
@Bean(name = "contextSource")
// @Scope("singleton")
public LdapContextSource ldapContextSource() {
String url = "ldap://127.0.0.1:389";
String base = "DC=intranet,DC=demo,DC=com";
if (isConfigurationValid(url, base)) {
LdapContextSource ldapContextSource = new LdapContextSource();
ldapContextSource.setUrl(url);
ldapContextSource.setBase(base);
ldapContextSource.setUserDn(
"CN=Test User,OU=Common Users OU,OU=RDP enabled Users OU,DC=intranet,DC=demo,DC=com");
ldapContextSource.setPassword("password");
ldapContextSource.setReferral("follow");
// lcs.setPooled(false);
// lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
ldapContextSource.afterPropertiesSet();
return ldapContextSource;
}
return null;
}
public boolean isConfigurationValid(String url, String base) {
if ((url == null) || url.isEmpty() || (base == null) || base.isEmpty()) {
log.error("Warning! Your LDAP server is not configured.");
log.info("Did you configure your LDAP settings in your application.yml?");
return false;
} else {
return true;
}
}
}
@Service
public class LDAPServiceImpl {
private final Logger log = LoggerFactory.getLogger(LDAPServiceImpl.class);
@Autowired
LdapTemplate ldapTemplate;
public User getUserDetails(String userName) {
AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("objectclass", "person")).and(new EqualsFilter("employeeID", "700335"));
List<User> users = ldapTemplate.search("", filter.encode(), new UaserAttributesMapper());
if (!users.isEmpty()) {
return users.get(0);
}
return null;
// List<User> list =
// ldapTemplate.search(query().where("sAMAccountName").is("a.keskempes"),
// new UserAttributesMapper());
// if ((list != null) && !list.isEmpty()) {
// return list.get(0);
// }
// return null;
}
private class UaserAttributesMapper implements AttributesMapper<User> {
@Override
public User mapFromAttributes(Attributes attributes) throws NamingException {
User user;
if (attributes == null) {
return null;
}
user = new User();
if (attributes.get("objectclass") != null) {
user.setObjectclass(attributes.get("objectclass").get().toString());
}
if (attributes.get("distinguishedname") != null) {
user.setDistinguishedname(attributes.get("distinguishedname").get().toString());
}
if (attributes.get("userPassword") != null) {
user.setUserPassword(attributes.get("userPassword").get().toString());
}
if (attributes.get("cn") != null) {
user.setCn(attributes.get("cn").get().toString());
}
if (attributes.get("telephoneNumber") != null) {
user.setTelephoneNumber(attributes.get("telephoneNumber").get().toString());
}
// if (attributes.get("lastlogoff") != null) {
// // user.setLastlogoff(DateTimeFormat.forPattern("yyyy-MM-dd
// // HH:mm:ss")
// //
// .parseDateTime(attributes.get("lastlogoff").get().toString()));
// DateTimeFormatter formatter =
// DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
// DateTime dt =
// formatter.parseDateTime(attributes.get("lastlogoff").get().toString());
// user.setLastlogoff(new DateTime(
//
// dt
//
// ));
// }
if (attributes.get("userprincipalname") != null) {
user.setUserprincipalname(attributes.get("userprincipalname").get().toString());
}
if (attributes.get("department") != null) {
user.setDepartment(attributes.get("department").get().toString());
}
if (attributes.get("company") != null) {
user.setCompany(attributes.get("company").get().toString());
}
if (attributes.get("mail") != null) {
user.setMail(attributes.get("mail").get().toString());
}
if (attributes.get("streetAddress") != null) {
user.setStreetAddress(attributes.get("streetAddress").get().toString());
}
if (attributes.get("st") != null) {
user.setSt(attributes.get("st").get().toString());
}
if (attributes.get("postalCode") != null) {
user.setPostalCode(attributes.get("postalCode").get().toString());
}
if (attributes.get("l") != null) {
user.setL(attributes.get("l").get().toString());
}
if (attributes.get("description") != null) {
user.setDescription(attributes.get("description").get().toString());
}
if (attributes.get("c") != null) {
user.setC(attributes.get("c").get().toString());
}
if (attributes.get("countryCode") != null) {
user.setCountryCode(attributes.get("countryCode").get().toString());
}
if (attributes.get("cn") != null) {
user.setCn(attributes.get("cn").get().toString());
}
if (attributes.get("sn") != null) {
user.setSn(attributes.get("sn").get().toString());
}
if (attributes.get("employeeID") != null) {
user.setEmployeeId(attributes.get("employeeID").get().toString());
}
if (attributes.get("lastLogon") != null) {
// user.setLastLogon(DateTimeFormat.forPattern("yyyy-MM-dd
// HH:mm:ss")/*
// .parseDateTime(attributes.get("lastLogon").get().toString()));*/
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(attributes.get("lastLogon").get().toString());
user.setLastLogon(new DateTime(
dt
));
}
if (attributes.get("memberof") != null) {
user.setMemberof(attributes.get("memberof").get().toString());
}
if (attributes.get("givenname") != null) {
user.setGivenname(attributes.get("givenname").get().toString());
}
if (attributes.get("logoncount") != null) {
user.setLogoncount(attributes.get("logoncount").get().toString());
}
if (attributes.get("displayName") != null) {
user.setDisplayname(attributes.get("displayName").get().toString());
}
return user;
}
}
}
and into the controller i put
JavaScript
@Autowired
private LDAPServiceImpl lDAPServiceImpl;
com.ppc.ptol2.service.impl.User find = lDAPServiceImpl.getUserDetails("sgad");
as you can see the solution is working perfectly but needds some improvements