2009-10-19 20 views
5

Necesito leer un montón de archivos binarios de un script Java que se ejecuta en Windows.cómo usar el nombre de usuario y la contraseña suministrados para leer un archivo en Java

Sin embargo, la carpeta en la que se encuentran los archivos tiene permisos limitados. Yo (es decir, mi nombre de usuario de Windows) tengo permisos para leerlos, pero el usuario que Java ejecuta como (esto es parte de una aplicación web) no tiene permisos. Si paso mi nombre de usuario y contraseña de red de Windows a Java en tiempo de ejecución, ¿hay alguna forma de que pueda leer esos archivos usando mis propios permisos en lugar de los del usuario web?

(Tenga en cuenta que esto no está sucediendo a través de Internet, lo que es un script de importación de una sola vez que se ejecuta en el contexto de una aplicación web.)

Respuesta

4

Se puede crear un recurso compartido de red y luego conectarse a través de jCIFS

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.UnknownHostException; 

import jcifs.smb.SmbException; 
import jcifs.smb.SmbFileInputStream; 

public class Example 
{ 
    public static void main(String[] args) 
    { 
     SmbFileInputStream fis = null; 
     try 
     { 
      fis = new SmbFileInputStream("smb://DOMAIN;USERNAME:[email protected]/SHARE/filename.txt"); 
      // handle as you would a normal input stream... this example prints the contents of the file 
      int length; 
      byte[] buffer = new byte[1024]; 
      while ((length = fis.read(buffer)) != -1) 
      { 
       for (int x = 0; x < length; x++) 
       { 
        System.out.print((char) buffer[x]); 
       } 
      } 
     } 
     catch (MalformedURLException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (SmbException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (fis != null) 
      { 
       try 
       { 
        fis.close(); 
       } 
       catch (Exception ignore) 
       { 
       } 
      } 
     } 
    } 
} 
0

Si los archivos están en un recurso compartido de red se puede utilizar la net herramienta. Con

runtime.exec("net use ...") 

para abrir y cerrar la compartir. Supongo que debería funcionar

Cuestiones relacionadas