Usuário atual da variável de ambiente do sistema Java
-
05-07-2019 - |
Pergunta
Qual é a melhor maneira de obter o usuário logado no momento por meio do aplicativo Java em execução no JBoss.A variável de ambiente do sistema System.getProperty("user.name") não funciona porque o JBoss está sendo executado como um serviço.
O aplicativo está sendo executado em um laptop com Windows XP.O aplicativo é baseado na web e acessado usando o Internet Explorer por um usuário específico do Windows conectado.Apenas 1 usuário do Windows pode estar conectado por vez.O aplicativo precisa saber qual usuário efetuou login para criar um menu baseado em função e recursos de segurança.Portanto, tanto o cliente (Internet Explorer) quanto o servidor (JBoss) estão rodando no mesmo laptop.Atualmente, determinamos o usuário conectado usando tasklist /v e, em seguida, analisamos a saída para procurar determinados processos e o usuário que os executa.No entanto, é necessário saber se existe uma maneira mais limpa de obter o usuário logado do Windows.
Solução
Não acho que a pergunta realmente faça muito sentido.Pode ser não usuários conectados ao host - ou pode haver vários usuários.
Eu ficaria um pouco cauteloso com um design que realmente quisesse saber disso - aplicativos da web não deveriam estar interessados nesse tipo de coisa, IMO.O que você está tentando fazer?
Outras dicas
String uname = System.getenv ("user.name")
Referência: http://download.oracle.com/javase/tutorial/essential/environment/sysprop.html
Isso pressupõe que você armazenou uma variável de ambiente chamada USERNAME quando o usuário efetuou login:
String username = System.getenv("USERNAME");
Ou, se desejar o conjunto completo de variáveis de ambiente:
Map<String, String> envMap = System.getenv();
Em seguida, percorra o mapa para obter uma variável de ambiente na qual você está armazenando um nome de usuário.
Map<String, String> envMap = System.getenv();
int mapsize = envMap.size();
Iterator i = envMap.entrySet().iterator();
for (int j = 0; j < mapsize; j++) {
Map.Entry entry = (Map.Entry) i.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
Use a autenticação JaaS. Você poderá usar o NTLM no Windows, para que o usuário não precise fazer nenhum trabalho adicional. Em seguida, no servidor, você pode usar o contexto de segurança para obter o diretor do chamador.