Abrir un archivo con Java desde un servidor que requiere autenticacion

publicado por: Anonymous

Buenas, estoy intentando realizar un aplicación en java, en la que el programa pide el nombre del documento (en mi caso un pdf) y se busca dentro de una carpeta compartida remotamente, en caso de que exista, abre el documento pdf. Esto lo estoy realizando actualmente de la siguiente manera:

String NomFichero = "file://200.10.10.156/Carpeta/archivo";
if(java.awt.Desktop.isDesktopSupported()) {
   try {
      Desktop dk = Desktop.getDesktop();
      dk.browse(new URI(NomFichero+".pdf"));
   }
   catch(Exception e1) {
      try {
         Desktop dk = Desktop.getDesktop();
         dk.browse(new URI(NomFichero+".jpg"));
      }
      catch(Exception e2) {
         JOptionPane.showMessageDialog(null,"ERROR: "+ e2.getMessage());
      }          
   }    
}  

Esto me funciona perfectamente si yo ingreso primeramente de PC a PC, y reconozco la credencial para el equipo cliente. Pero la idea es acceder ya con la autenticación para evitar dicho paso.

Se de una libreria jcifs, viene a ser una implementación de samba, en donde si podemos ingresar a carpetas compartidas remotamente, y con las credenciales en cuestión, es más, utilizo esta librería para el acceso a la carpeta en el momento de editar el nombre de un documento o bien eliminarlo, pero para abrirlo francamente no encuentro un método que pueda utilizar.
Agredecería mucho de su ayuda. Exitos!

solución

Leo en los comentarios que se trata de un servidor FTP, por lo que deberías utilizar la mencionada librería de Apache, en concreto haciendo uso de la clase FTPClient.

La solución que propongo es para atacar un equipo Windows que aloje una carpeta compartida (o en su defecto, un servidor SAMBA), previa autenticación usando la librería JCIFS.

Ten en cuenta que, al menos en el ejemplo que propones, la dirección IP del ordenador es pública (habrá que hacer NAT si no está dentro de la misma subred).

Solución:

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
import jcifs.UniAddress;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbSession;

public class Pruebas {

    public static void main(String args[]) {
        // Autenticación
        try {
            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
                "WORKGROUP;Usuario:Password"
            );
            UniAddress dc = UniAddress.getByName("200.10.10.156");
            SmbSession.logon(dc, auth);
        } catch (SmbException | UnknownHostException ex) {
        }

        // Tu código
        String NomFichero = "file://200.10.10.156/Carpeta/archivo";
        if (java.awt.Desktop.isDesktopSupported()) {
            try {
                Desktop dk = Desktop.getDesktop();
                dk.browse(new URI(NomFichero + ".pdf"));
            } catch (IOException | URISyntaxException e1) {
                try {
                    Desktop dk = Desktop.getDesktop();
                    dk.browse(new URI(NomFichero + ".jpg"));
                } catch (IOException | URISyntaxException e2) {
                    JOptionPane.showMessageDialog(null, "ERROR: " + e2.getMessage());
                }
            }
        }
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published.