Pessoal estou tendo problemas em pegar o usuário logado na rede. Ocorre que estou utilizando a função: System.getProperty("user.name");
Mas com esta função eu estou pegando o usuário logado na máquina e com isso me é retornado sempre o usuário logado na máquina servidora da aplicação. Agradeço se alguém tiver uma dica ou souber de alguma função que retorne o usuário da rede.
Douglas, a JVM é um processo, desta maneira você pega o dono do processo. Você quer o login de quem, afinal?
Só para deixar mais claro, temos uma rede nt aqui na empresa e eu tenho uma aplicação no servidor de aplicações Tomcat, rodando em uma máquina servidora. Acontece que preciso pegar o usuário da rede que da sua máquina cliente acessou a aplicação. Por exemplo na máquina servidora o usuário de rede por exemplo é o administrator e eu usuário douglas acessei a aplicação de minha máquina onde estou logado como douglas. preciso que a aplicação me retorne como usuário que está acessando a aplicação “douglas” e não “administrator” como está acontecendo no momento. Espero ter sido um pouco mais claro é que é meio difícil de explicar.
Tentando esclarecer um pouco mais, o que gostaria de ver com vocês é se alguém sabe se existe alguma função parecida com esta do ASP em JSP:Set NT = CreateObject("WScript.NetWork")
Usuario = nt.username
Esta fução retorna o usuário logado na rede em ASP.
Usando o jCifs.jar (que está no link que lhe passei acima) e modificando o seu web.xml, dá para você chamar request.getRemoteUser() e obter o usuário (como por exemplo “NYC-USERS\MIALLEN” no caso de você ter um domínio NYC-USERS o usuário logado MIALLEN.) Se o usuário não estiver logado (Windows 98 por exemplo, onde o usuário simplesmente teclou ESC para pular a tela de login) getRemoteUser deve retornar null.
Valeu thingol, vou baixar o jar modificar o web.xml e testar. Depois posto aí o resultado, falou. :thumbup:
Thingol, tentei modificar o meu web.xml que está dentro da pasta do meu projeto: [quote]Helpdesk\WEB-INF[/quote]Gostria de que se possível desse uma olhada no conteúdo do arquivo web.xml que estou utilizando e verificasse se existe algo de errado:[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Descrições Gerais da sua aplicação -->
<!--
Define um nome a ser mostrado para a aplicação.
Não tem relação com o context-path, ou seja, essa
configuração não vai alterar a maneira como vc
acessa sua aplicação
-->
<display-name>Minha Aplicacao Web</display-name>
<!--
Descrição para a sua aplicação web.
-->
<description>
Esta eh a versão X.X de uma aplicacao web
que faz uso de servlet e jsp e serve para
automatizar coisa tal.
</description>
<!--
Parametro de inicializacao que serah utilizado
por toda a sua aplicacao. Valores definidos nessa
tag podem ser recuperados em um servlet ou uma jsp
pela chamada do seguinte metodo:
String param =
getServletContext().getInitParameter("name");
Onde "name" deve coincidir com o valor definido
na subtag <param-name>.
Vc pode definir qualquer numero de paramentros
de inicializacao que forem necessarios.
Inclusive zero.
-->
<context-param>
<!-- Nome do parametro de incializacao -->
<param-name>webmaster</param-name>
<!-- Valor do parametro -->
<param-value>myaddress@mycompany.com</param-value>
<description>
Endereco de email do adminstrador para quem questoes
e comentarios sobre a aplicacao devem ser enviados.
</description>
</context-param>
<!--
Definições para os servlets que fazem parte da
sua aplicação, incluindo parametros de inicializacao.
No Tomcat, vc pode tambem enviar requisicoes (requests)
para servlets não listados aqui da seguinte maneira:
[url]http://localhost:8080/{context-path}/servlet/{classname}[/url]
Entretanto, esse uso não é garantidamente portavel.
Isso tambem torna referencias relativas a recursos
usados por seu servlet mais complicadas. Então definir
todos os seus servlet é o mais recomendado.
Parametros de inicialização do servlet podem ser recuperados
em um servlet ou jsp da seguinte maneira:
String value =
getServletConfig().getInitParameter("nome");
Onde "nome" deve coincidir com o valor de <param-name>
para algum dos parametros.
Você pode definir qualquer quantidade de servlets incluindo
zero.
-->
<servlet>
<!--
Nome para o servlet. Essa tag é obrigatoria
quando se define um servlet
-->
<servlet-name>meuServlet</servlet-name>
<description>
Servlet usado para recupera algo em algum lugar.
</description>
<!--
Tag usada para indicar a classe (completamente qualificada)
que representa o servlet definido. Essa tag é obrigatoria
quando se define um servlet.
-->
<servlet-class>com.meu.pacote.ServletTal</servlet-class>
<!--
Lista de parametros de inicializacao referentes apenas
a esse servlet. Voce pode usar quantos <init-param>
quiser inclusive zero.
-->
<init-param>
<param-name>listOrders</param-name>
<param-value>com.mycompany.myactions.ListOrdersAction</param-value>
</init-param>
<!--
A tag load-on-startup indica que este servlet deve
ser carregado (loaded, ou seja, intanciado e ter seu
metodo init() chamado) quando a aplicação for iniciada.
O conteudo desse elemento deve ser um inteiro indicando
a ordem na qual os servlets serão carregados. Se o valor
um inteiro negativo, ou não é apresentado, o container
está livre para carregar o servlet a qualquer hora que
escolher. Se o valor é um inteiro positivo ou 0 (zero),
o container deve carregar e inicializar o servlet assim
que a aplicação é iniciada. O container deve garantir que
servlet marcados com inteiros MENORES devem ser carregados
ANTES de servlets marcados com inteiros com altos valores.
O Container pode escolher a ordem para carregar servlet
marcados com o mesmo valor em load-on-startup
-->
<load-on-startup>5</load-on-startup>
</servlet>
<!--
A tag <serlvet-mapping> define um mapeamento que é usado
pelo servlet container para traduzir um request URI para
um servlet em particular. Os exemplos abaixo corresponde
a descricao feita para o servlet acima (pelo uso da tag
<servlet>. Assim, o valor de servlet-name, para mapear
um determinado servlet, deve ser o mesmo usado para definir
o servlet como mostrado acima. Dessa forma, um request URI
como:
[url]http://localhost:8080/{contextpath}/meuServlet[/url]
Será mapeada para o servlet "meuSerlvet".
Voce pode definir qualquer numero de mapeamentos para
serlvets, incluindo zero. Tambem é permitido fazer mais
de um mapeamento para um mesmo servlet.
-->
<servlet-mapping>
<servlet-name>meuServlet</servlet-name>
<url-pattern>/meuServlet</url-pattern>
</servlet-mapping>
<!--
Define um timeout default para as sessions de sua
aplicacao, em minutos. A partir de um serlvet ou
JSP voce pode modificar manualmente o timeout para
uma session em particular usando dinamicamente os
metodos HttpSession.getMaxInactiveInterval() e
HttpSession.setMaxInactiveInterval(int interval).
-->
<session-config>
<!-- 30 minutos -->
<session-timeout>30</session-timeout>
</session-config>
<!--
Lista de arquivos que serao procurados quando
alguem acessar o diretorio virtual de sua aplicacao.
Os arquivos são listados em ordem de prioridade, de
modo que os primeiros serão procurados antes e, caso
não seja encontrado, o servlet container tentará
usar o proximo da lista.
-->
<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>NYC-USERS</param-value>
</init-param>
<init-param>
<param-name>jcifs.netbios.wins</param-name>
<param-value>10.169.10.77,10.169.10.66</param-value>
</init-param>
NtlmHttpFilter
/*
<welcome-file-list>
<welcome-file>default2.jsp</welcome-file>
</welcome-file-list>
[/code]Estou utilizando a chamada dentro de minha JSP da seguinte maneira:String usuario = request.getRemoteUser();
Coloquei o arquivo jcifs-1.1.11.jar dentro de meu projeto, no caminho: C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.0\webapps\Helpdesk\WEB-INF\lib. Agradeço se puderes me ajudar.
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>NYC-USERS</param-value>
</init-param>
<init-param>
<param-name>jcifs.netbios.wins</param-name>
<param-value>10.169.10.77,10.169.10.66</param-value>
</init-param>
Agora você precisa fazer duas coisas:
- Entender o parâmetro que você está passando (o exemplo não é para ser copiado literalmente, mas para ser adaptado para a sua rede)
No seu caso, qual é o nome do seu domínio da rede? Quais são os endereços do servidor WINS de sua rede?
Para saber qual o nome do seu domínio - acho que você sabe.
Para saber endereço do servidor WINS - use ipconfig /all. Exemplo:
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : xxxxx.com.br
Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network Connection
Physical Address. . . . . . . . . : 00-0C-F1-99-CA-5B
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 10.177.77.77
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : 10.177.0.1
DHCP Server . . . . . . . . . . . : 10.177.0.3
DNS Servers . . . . . . . . . . . : 200.177.9.177
200.177.9.178
Primary WINS Server . . . . . . . : 10.177.0.15
Lease Obtained. . . . . . . . . . : Monday, 06/13/segunda-feira, 13 de junho de 2005 09:50:
34
Lease Expires . . . . . . . . . . : terça-feira, 21 de junho de 2005 09:50:34
Veja o “Primary WINS Server” para ver o que aparece.
- E - acho que você precisa ligar a autenticação na sua web application,
Beleza thingol, mas onde devo colocar estes parâmetros. Desculpe minha ignorância, mas é que estou começando a mexer com JSP. Gostaria de que se possível me indicasse no arquivo web.xml onde eu faria estas configurações. Tipo onde eu precisaria colocar o “nome do domínio” e o “endereço do servidor WINS”. E só para entender melhor, gostaria que me explicasse esta parte de ligar a autenticação na minha web application. É porque pelo que entendi, você está querendo me dizer que deveria fazer um login em minha aplicação, e se for isto, gostaria de dizer que isto não acontece na aplicação. O que ocorre é que estou passando uma aplicação que inicialmente foi feita em ASP para JSP e nela bastava o usuário estar logado na rede nt do windows para que o mesmo fosse pego pela aplicação através do comando: Set NT = CreateObject("WScript.NetWork")
Usuario = nt.username
E gostaria de fazer o mesmo em JSP. Agradeço se puderes me ajudar.
É soh pegar o web.xml q vc postou e alterar conforme as descriçoes Mamao-com-Açucar que o thingol postou.
Pessoal, mudei o meu web.xml:[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Descrições Gerais da sua aplicação -->
<!--
Define um nome a ser mostrado para a aplicação.
Não tem relação com o context-path, ou seja, essa
configuração não vai alterar a maneira como vc
acessa sua aplicação
-->
<display-name>Minha Aplicacao Web</display-name>
<!--
Descrição para a sua aplicação web.
-->
<description>
Esta eh a versão X.X de uma aplicacao web
que faz uso de servlet e jsp e serve para
automatizar coisa tal.
</description>
<!--
Parametro de inicializacao que serah utilizado
por toda a sua aplicacao. Valores definidos nessa
tag podem ser recuperados em um servlet ou uma jsp
pela chamada do seguinte metodo:
String param =
getServletContext().getInitParameter("name");
Onde "name" deve coincidir com o valor definido
na subtag <param-name>.
Vc pode definir qualquer numero de paramentros
de inicializacao que forem necessarios.
Inclusive zero.
-->
<context-param>
<!-- Nome do parametro de incializacao -->
<param-name>webmaster</param-name>
<!-- Valor do parametro -->
<param-value>myaddress@mycompany.com</param-value>
<description>
Endereco de email do adminstrador para quem questoes
e comentarios sobre a aplicacao devem ser enviados.
</description>
</context-param>
<!--
Definições para os servlets que fazem parte da
sua aplicação, incluindo parametros de inicializacao.
No Tomcat, vc pode tambem enviar requisicoes (requests)
para servlets não listados aqui da seguinte maneira:
[url]http://localhost:8080/{context-path}/servlet/{classname}[/url]
Entretanto, esse uso não é garantidamente portavel.
Isso tambem torna referencias relativas a recursos
usados por seu servlet mais complicadas. Então definir
todos os seus servlet é o mais recomendado.
Parametros de inicialização do servlet podem ser recuperados
em um servlet ou jsp da seguinte maneira:
String value =
getServletConfig().getInitParameter("nome");
Onde "nome" deve coincidir com o valor de <param-name>
para algum dos parametros.
Você pode definir qualquer quantidade de servlets incluindo
zero.
-->
<servlet>
<!--
Nome para o servlet. Essa tag é obrigatoria
quando se define um servlet
-->
<servlet-name>meuServlet</servlet-name>
<description>
Servlet usado para recupera algo em algum lugar.
</description>
<!--
Tag usada para indicar a classe (completamente qualificada)
que representa o servlet definido. Essa tag é obrigatoria
quando se define um servlet.
-->
<servlet-class>com.meu.pacote.ServletTal</servlet-class>
<!--
Lista de parametros de inicializacao referentes apenas
a esse servlet. Voce pode usar quantos <init-param>
quiser inclusive zero.
-->
<init-param>
<param-name>listOrders</param-name>
<param-value>com.mycompany.myactions.ListOrdersAction</param-value>
</init-param>
<!--
A tag load-on-startup indica que este servlet deve
ser carregado (loaded, ou seja, intanciado e ter seu
metodo init() chamado) quando a aplicação for iniciada.
O conteudo desse elemento deve ser um inteiro indicando
a ordem na qual os servlets serão carregados. Se o valor
um inteiro negativo, ou não é apresentado, o container
está livre para carregar o servlet a qualquer hora que
escolher. Se o valor é um inteiro positivo ou 0 (zero),
o container deve carregar e inicializar o servlet assim
que a aplicação é iniciada. O container deve garantir que
servlet marcados com inteiros MENORES devem ser carregados
ANTES de servlets marcados com inteiros com altos valores.
O Container pode escolher a ordem para carregar servlet
marcados com o mesmo valor em load-on-startup
-->
<load-on-startup>5</load-on-startup>
</servlet>
<!--
A tag <serlvet-mapping> define um mapeamento que é usado
pelo servlet container para traduzir um request URI para
um servlet em particular. Os exemplos abaixo corresponde
a descricao feita para o servlet acima (pelo uso da tag
<servlet>. Assim, o valor de servlet-name, para mapear
um determinado servlet, deve ser o mesmo usado para definir
o servlet como mostrado acima. Dessa forma, um request URI
como:
[url]http://localhost:8080/{contextpath}/meuServlet[/url]
Será mapeada para o servlet "meuSerlvet".
Voce pode definir qualquer numero de mapeamentos para
serlvets, incluindo zero. Tambem é permitido fazer mais
de um mapeamento para um mesmo servlet.
-->
<servlet-mapping>
<servlet-name>meuServlet</servlet-name>
<url-pattern>/meuServlet</url-pattern>
</servlet-mapping>
<!--
Define um timeout default para as sessions de sua
aplicacao, em minutos. A partir de um serlvet ou
JSP voce pode modificar manualmente o timeout para
uma session em particular usando dinamicamente os
metodos HttpSession.getMaxInactiveInterval() e
HttpSession.setMaxInactiveInterval(int interval).
-->
<session-config>
<!-- 30 minutos -->
<session-timeout>30</session-timeout>
</session-config>
<!--
Lista de arquivos que serao procurados quando
alguem acessar o diretorio virtual de sua aplicacao.
Os arquivos são listados em ordem de prioridade, de
modo que os primeiros serão procurados antes e, caso
não seja encontrado, o servlet container tentará
usar o proximo da lista.
-->
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>premium.com.br</param-value>
</init-param>
<init-param>
<param-name>jcifs.netbios.wins</param-name>
<param-value>192.168.0.2</param-value>
</init-param>
<welcome-file-list>
<welcome-file>default2.jsp</welcome-file>
</welcome-file-list>
[/code]Coloquei o arquivo “jcifs-1.1.11.jar” no caminho:C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.0\webapps\Helpdesk\WEB-INF\lib e dentro da página JSP tentei pegar o usuário da rede com o comando que me passaram: String usuario = request.getRemoteUser();
Mas ao mandar escrever a variável “usuario” na tela me foi retornado null. Gostaria de saber se fiz algo de errado ou se ainda falta configurar mais alguma coisa. Agradeço desde já pela ajuda de todos.
[quote=thingol]Usando o jCifs.jar (que está no link que lhe passei acima) e modificando o seu web.xml, dá para você chamar request.getRemoteUser() e obter o usuário (como por exemplo “NYC-USERS\MIALLEN” no caso de você ter um domínio NYC-USERS o usuário logado MIALLEN.) Se o usuário não estiver logado (Windows 98 por exemplo, onde o usuário simplesmente teclou ESC para pular a tela de login) getRemoteUser deve retornar null.
[/quote]
E se eu tiver mais de um dominio??
como eu vou está passando esses parametros fora do web.xml?
Pessoal, e seu possuir uma aplicação gernérica, que rode na web … e não conheça os DOMINIOS ??? Tem como obter o login de rede ? assim como o dominio e o nome do usuário que está logado rede ? Ou se eu informar uma lista de DOMINIOS tem como obter essas informações ? com o JCIFS, pelo que entendi … vc tem q passar UM DOMINIO… tava procurando pra ver se achava algo … mas até agora nada!