Autenticação

Estou com o seguinte cenário: 2 servidores, onde um deles é o servidor de aplicação (WebSphere), e outro um servidor de arquivos. Preciso através de uma aplicação que vai rodar no websphere realizar o login com usuário e senha, para conseguir ler os arquivos contidos no outro servidor, pois o usuário que é carregado no servidor de aplicação não tem acesso ao outro servidor.

Só fazendo aquelas perguntinhas de sempre, para saber como é que você tem de se autenticar, e que tipo de configuração de rede você tem:

  1. O servidor de arquivos está em que sistema operacional (Windows, Netware, Unix, Linux, etc.)
  2. O Websphere está rodando em que sistema operacional (Windows, Solaris, Linux, etc.
  3. Os servidores (de arquivos e o Websphere) estão separados por um firewall? Se forem, que portas estão abertas?

No momento os 2 servidores são Linux, mas como o caminho para leitura dos arquivos gerados pelo main-frame é dinâmico, o servidor de arquivos poderá ser outro, não necessariamente Linux.
Os servidores não estão separados por firewall

OK. Então como você acessa os arquivos no Linux, via SSH (scp) ? Ou via rcp? Ou então via ftp (não muito recomendado)? Ou talvez via WebDAV? Como você está fazendo isso manualmente?

Tem Samba, dae o pessoal acessa por exemplo \172.0.0.3…

Para o Samba você teria de usar o JCIFS ( http://jcifs.samba.org/src/docs/api/overview-summary.html#scp ) se o seu client (Webpshere) vai rodar em Linux ou algum outro Unix.
É que o autenticador do Sun Java para SMB só funciona em Windows, pois usa código nativo Windows.
Eu em particular não gosto muito do Samba, acho que abre montes de buracos de segurança; prefiro o SSH ( http://www.jcraft.com/jsch/index.html , http://ant.apache.org/manual/OptionalTasks/scp.html )

Como eu faria se o servidor for Windows usando o authenticator…

Seria o client (Websphere) em Windows que poderia (em tese) usar o Authenticator.
Mas é que normalmente o Websphere roda em JDK 1.3, não 1.4, e se não me engano o Authenticator não está disponível em 1.3. Ou então o Websphere rodaria em IBM JDK 1.4, e não sei qual é o Authenticator disponível (não deve ser com.sun.*)

Em vez disso acho mais fácil sempre usar o JCIFS. Você não fica dependendo de ambientes.

o Authenticator funciona desde 1.2, com exceção dos métodos requestPasswordAuthentication e getRequestingHost() que funciona apenas apartir da 1.4. Eu teria que usar mesmo, é a API padrão da sun, pois se trata de um aplicativo Bancário. E o cliente soh aceita outra APIs, após muita auditoria. Acho que a melhor saida então é restringir o servidor de arquivos para plataforma Windows, ou fazer o main-frame gravar os arquivos diretamente no servidor onde está o webshere. Se tiveres alguma outra alternativa!

Valeu pela ajuda.

Fazendo aquela perguntinha besta - acho que você ainda está confundindo cliente e servidor nessa sua configuração.
No caso “servidor”, tanto faz se o servidor é Linux (Samba) ou Windows, porque usam o mesmo protocolo (SMB) para comunicação com o client.
É o client que deve saber falar SMB. Se não me engano, o Authenticator SMB da Sun só funciona em ambiente Windows, mas não sei se seu JDK usado pelo seu Websphere também tem um autenticador SMB.
É melhor discutir direito com o pessoal do banco o que pode ser usado nesse caso.

Opa, tentei usar o Authenticator para acessar um servidor windows, mas não funcionou, ele não consegue ler o diretório.

Só um parêntese…

Alguns bancos fazem o seguinte: em vez de deixarem seus arquivos expostos via SMB (que é não é tão seguro assim - o sistema de proteção de arquivos do Windows é tão complicado que o administrador de rede acaba deixando com mais permissões que as devidas, além disso você precisa abrir um monte de portas que são sabidamente inseguras), põem o servidor de arquivos atrás do firewall, e usam algum outro método de transportar arquivos - como o ssh (scp) que mencionei anteriormente.

Eu não consigo simular o perfil do cliente, aqui onde estamos desenvolvendo o aplicativo. O cenário aqui é: servidor Windows, e ele até onde entendi sobre o authenticator deveria chamar o método getPasswordAuthentication para fazer a autenticação, mas esse método não é chamado.