PDA

View Full Version : [Java - Tomcat] Permessi di lettura.


jj.69kt
11-07-2010, 09:16
Salve,
dopo la domanda inutile dell'altro giorno ho un altro problema che non risco assolutamente a risolvere.

Uso una funzione ricorsiva per reperire tutti i files contenuti in una cartella e le sue sottocartelle, fin qui nessun problema infatti mi funziona tutto con eclipse ed il server fornito dal plugin di GWT, ma se provo a fare deploy sul server dell'università ( http://ltw1008.cs.unibo.it/ ) ho un problema di permessi, nonostante i files siano dentro lo spazio della webApp.
Secondo voi è un problema coi permessi reale o c'è un sistema per aggirarlo?
Inoltre ho provato ad usare un server in locale scaricandomi Apache Tomcat e facendo la deploy nella sua cartela /webapp/phantom/ ed in questo caso mi restituisce "jndi:/localhost/phantom/xml" dove phantom è il nome della webapp.


Ecco il codice che uso:

public class DocListServer
extends RemoteServiceServlet
implements DocManager {

private static final long serialVersionUID = -6025311575129578843L;

/**
* URL assoluto del root folder della web-app
*/
public static URL absol_ROOT_Url;

private static FileFilter filter;

private static ArrayList<TeiDoc> docList;
private static HashMap<String, String> docTextCache;


public DocListServer(){
super();

initVars();

}


private void initVars(){
filter = new FileFilter(".xml");
docList = new ArrayList<TeiDoc>();
docTextCache = new HashMap<String, String>();

}

public ArrayList<TeiDoc> getDocInfo() {

return docList;
}


public Boolean scanDirMain() {

if(docList.isEmpty()){
try {
absol_ROOT_Url = new URL("file://");
absol_ROOT_Url = getServletContext().getResource("/");
scanDir(new URL(absol_ROOT_Url.toString().concat("xml")));

} catch (MalformedURLException mue) {
mue.printStackTrace();
return false;
} catch (AccessControlException ace){
System.out.println("Permesso di lettura negato");
return false;
}
}

return true;
}




/**
* this method lists recursively a folder and saves the file list with the associated URI list
* in the <i>files</i> field
*
* @param path the directory URI to scan
* @throws MalformedURLException
*/
private static void scanDir(URL path) throws MalformedURLException, AccessControlException{
File[] content = new File[0];
File dir = new File(path.getFile());

if((content = dir.listFiles(filter)) != null){
for (File thisFile:content){
//System.out.println("Content["+i+"] of path "+path+":\n\t"+content[i].toString()+"\n"); // DEBUG

if(thisFile.isFile())
docList.add( XMLDocManager.getInfo(thisFile.getAbsolutePath(), thisFile.getName()) );
else
scanDir(new URL("file://" + thisFile.getAbsolutePath()));

}// END for file list

} // EndIf content != null
else
System.out.println("{content == null} La cartella seguente è vuota: " + path);
}
}

FileFilter.java

public class FileFilter implements FilenameFilter {
protected String pattern;

/**
* Sets the file extension's filter
* @param str the file extension
*/
public FileFilter(String str) {
pattern = str.toLowerCase();
}

public boolean accept (File dir, String name) {
//System.out.println("Dir> "+dir.toString()+"\nFile> "+name); //DEBUG
return (name.toLowerCase().endsWith(pattern) |
new File(dir+"/"+name).isDirectory());
}
}



Grazie per l'aiuto.

EDIT:
Ho sistemato le stringhe che facevano riferimento a costanti e non si capiva bene il codice.

jj.69kt
12-07-2010, 08:40
Nessun'idea?

jj.69kt
15-07-2010, 10:17
Nessun'idea? o nessuno che guarda il thread? XD

lovaz
15-07-2010, 11:09
Devi essere un po' piu' preciso, cosa vuol dire "ho un problema di permessi"?
e "mi restituisce jndi:..."? chi restituisce?

jj.69kt
15-07-2010, 13:51
Si, scusa in effetti i dati potrebbero essere di più.
Il problema di permessi l'ho verificato su un server dell'università mentre n locale mi si resenta il problema della "cartella vuota"..
In pratica ho un controllo ce se la cartella è vuota stampa nello standard output il nome della cartella he risulta vuota, e questo controllo mi restituisce per l'appunto "jndi:/localhost/phantom/xml" quando cerco di leggere la cartella /xml/ che dovrebbe essere nella root della mia webapp.
Purtroppo ho usato Eclipse ed il plugin di GWT per creare il progetto e pare che questo plugin non usi Tomcat come server per cui il codice che funziona su Eclipse non funziona sempre su Tomcat.. Come è successo appunto adesso con la lettura della cartella..

Ho sentito voci che non è possibile leggere un file su Tomcat se no utilizzando uno StreamInput (per esempio FileStreamInput), è vero? Ed in tal caso, come faccio a riconoscere se si tratta di un file o di una cartella?


Perché il mio obbiettivo è quello di avere una lista di files (con le relativa path) contenuti in una cartella e le sue sottocartelle.

jj.69kt
19-07-2010, 09:52
Non sono stato sufficientemente esplicativo?