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.
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.
fpapaiz
Eu acesso o AD via LDAP para obter os dados
Veja abaixo codigo de exemplo:
packagebr.gov.tjrn.arq.auth.activeDirectory;importjava.util.Hashtable;importjavax.naming.Context;importjavax.naming.NamingEnumeration;importjavax.naming.NamingException;importjavax.naming.directory.Attributes;importjavax.naming.directory.SearchControls;importjavax.naming.directory.SearchResult;importjavax.naming.ldap.InitialLdapContext;importjavax.naming.ldap.LdapContext;publicclassDadosLoginActiveDirectory{publicstaticvoidmain(String[]args)throwsNamingException{StringloginPesquisado="teste";Stringdominio="@intranet.tjrn";// specify the LDAP search filterStringsearchBase="DC=intranet,DC=tjrn";// prepara parametros de conexao ao ADHashtable<String,String>envDC=newHashtable<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 ADenvDC.put(Context.SECURITY_PRINCIPAL,<usuario+dominio>);envDC.put(Context.SECURITY_CREDENTIALS,<senha>);// URL de conexaoenvDC.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 domainenvDC.put(Context.REFERRAL,"follow");// configura os atributos que serão obtidos na forma bináriaenvDC.put("java.naming.ldap.attributes.binary","objectGUID objectSid msSFUPassword");// libera o LdapContext desta instancia, caso ele já estive atribuídoLdapContextldapContext=newInitialLdapContext(envDC,null);// Now perform a search against the GC// Create the search controlsSearchControlssearchCtls=newSearchControls();// Specify the attributes to returnString[]returnedAtts={"givenName","objectGUID","displayName","distinguishedName","userPrincipalName","samAccountName","objectClass","sn","unicodePwd","userPassword","msSFUPassword"};searchCtls.setReturningAttributes(returnedAtts);// Specify the search scopesearchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);StringsearchFilter="(&(objectClass=user)(userPrincipalName="+(loginPesquisado+dominio)+"))";// Search for objects in the GC using the filterNamingEnumerationanswer=ldapContext.search(searchBase,searchFilter,searchCtls);if(answer.hasMoreElements()){SearchResultsr=(SearchResult)answer.next();// Print out some of the attributes, catch the exception if the// attributes have no valuesAttributesattrs=sr.getAttributes();// exibe os valores dos atributos retornados junto com seus valoresNamingEnumerationenumeration=attrs.getIDs();while(enumeration.hasMoreElements()){StringattrId=(String)enumeration.nextElement();System.out.println(attrs.get(attrId));}System.out.println();// obtem o displayName e nocaso dele ser null, pega o givenNameStringuserName="";if(attrs.get("displayName")!=null){userName=(String)attrs.get("displayName").get();}elseif(attrs.get("givenName")!=null){userName=(String)attrs.get("givenName").get();}// obtem o distinguishedName e o userPrincipalNameStringdistinguishedName=(String)attrs.get("distinguishedName").get();StringuserPrincipalName=(String)attrs.get("userPrincipalName").get();System.out.println(userName);System.out.println(distinguishedName);System.out.println(userPrincipalName);}}}