Boas pessoal,
Gostaria de saber se apartir de de codigo java é possivel apanhar o user name que foi logado no computador.
A minha rede tem 100 computadores que correm windows XP e eu utilizo uma aplicação desktop e necessito que ela me apanhe os dados do utilizador ( Apartir do Active Directory do Windows ), como user logado, nome comleto do user, e-mail , etc.
Agradeço desde ja ajuda !
É possível obter o login name, mas não o user name.
String loginName = System.getProperty("user.name")
No Java, você ainda pode pegar:
user.home -> O diretório home do usuário. No caso do Windows, a pasta do usuário dentro do Documents and Settings
user.dir -> O diretório de trabalho do usuário.
Eu acesso o AD via LDAP para obter os dados
Veja abaixo codigo de exemplo:
package br.gov.tjrn.arq.auth.activeDirectory;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class DadosLoginActiveDirectory{
public static void main(String[] args) throws NamingException {
String loginPesquisado = "teste";
String dominio = "@intranet.tjrn";
// specify the LDAP search filter
String searchBase = "DC=intranet,DC=tjrn";
// prepara parametros de conexao ao AD
Hashtable<String, String> envDC = new Hashtable<String, String>();
envDC.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
// atribui as credenciais de segurança (note: using simple cleartext
// authentication)
envDC.put(Context.SECURITY_AUTHENTICATION, "simple");
// usuario para fazer o bind com o AD
envDC.put(Context.SECURITY_PRINCIPAL, <usuario+dominio>);
envDC.put(Context.SECURITY_CREDENTIALS, <senha>);
// URL de conexao
envDC.put(Context.PROVIDER_URL, "ldap://<IP do servidor AD>");
// We need to chase referrals when retrieving attributes from the DC
// as the object may be in a different domain
envDC.put(Context.REFERRAL, "follow");
// configura os atributos que serão obtidos na forma binária
envDC.put("java.naming.ldap.attributes.binary",
"objectGUID objectSid msSFUPassword");
// libera o LdapContext desta instancia, caso ele já estive atribuído
LdapContext ldapContext = new InitialLdapContext(envDC, null);
// Now perform a search against the GC
// Create the search controls
SearchControls searchCtls = new SearchControls();
// Specify the attributes to return
String[] returnedAtts = { "givenName", "objectGUID", "displayName",
"distinguishedName", "userPrincipalName", "samAccountName",
"objectClass", "sn", "unicodePwd", "userPassword",
"msSFUPassword" };
searchCtls.setReturningAttributes(returnedAtts);
// Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(&(objectClass=user)(userPrincipalName="
+ (loginPesquisado + dominio) + "))";
// Search for objects in the GC using the filter
NamingEnumeration answer = ldapContext.search(searchBase, searchFilter,
searchCtls);
if (answer.hasMoreElements()) {
SearchResult sr = (SearchResult) answer.next();
// Print out some of the attributes, catch the exception if the
// attributes have no values
Attributes attrs = sr.getAttributes();
// exibe os valores dos atributos retornados junto com seus valores
NamingEnumeration enumeration = attrs.getIDs();
while (enumeration.hasMoreElements()) {
String attrId = (String) enumeration.nextElement();
System.out.println(attrs.get(attrId));
}
System.out.println();
// obtem o displayName e nocaso dele ser null, pega o givenName
String userName = "";
if (attrs.get("displayName") != null) {
userName = (String) attrs.get("displayName").get();
} else if (attrs.get("givenName") != null) {
userName = (String) attrs.get("givenName").get();
}
// obtem o distinguishedName e o userPrincipalName
String distinguishedName = (String) attrs.get("distinguishedName")
.get();
String userPrincipalName = (String) attrs.get("userPrincipalName")
.get();
System.out.println(userName);
System.out.println(distinguishedName);
System.out.println(userPrincipalName);
}
}
}
Rapaz… muito legal isso.
A dica foi pros meus favoritos!!!