2017-06-18 9 views
0

Linuxサーバ(Ubuntu 16.04)のTomcat8ウェブサーバーのサーブレット内にweb3jライブラリを使用します。WEB-INF以外のファイルへのアクセス

私はサーブレットからファイルを読む必要があります。サーブレットのコードは次のとおりです。

Credentials credentials = null; 
    String password = "secretPassword"; 
    String pathToWalletFile = "/home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00"; 
    File file = new File(pathToWalletFile); 

    try { 
     credentials = WalletUtils.loadCredentials(
       password, 
       file 
     ); 
    } catch (CipherException e) { 
     e.printStackTrace(); 
    } 

ファイルには、権限を持っている:644(-rw-rを - r--の)Ubuntuの16.04で '須藤はaptインストールtomcat8'(ユーザー:tomcat8)を使用してTomcat8デフォルト設定でインストール私は次のエラーを取得するサーブレットを呼び出す

場合:私は、WEB-INF内のファイルを置く場合

HTTP Status 500 - /home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00 (Permission denied) 

type Exception report 

message /home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00 (Permission denied) 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

java.io.FileNotFoundException: /home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00 (Permission denied) 
java.io.FileInputStream.open0(Native Method) 
java.io.FileInputStream.open(FileInputStream.java:195) 
java.io.FileInputStream.<init>(FileInputStream.java:138) 
com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:756) 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2740) 
org.web3j.crypto.WalletUtils.loadCredentials(WalletUtils.java:76) 
net.cryptonomica.tomcatweb3j.TestServlet.doGet(TestServlet.java:75) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

note The full stack trace of the root cause is available in the Apache Tomcat/8.0.32 (Ubuntu) logs. 

Apache Tomcat/8.0.32 (Ubuntu) 

、それが動作します。 tomcat(またはjetty)のWEB-INF以外のファイルにアクセスする方法を教えてください。


UPD: ユーザーtomcat8は/home/ubuntu/.ethereum/読み取ることができますが、ディレクトリ

$ sudo -u tomcat8 ls /home/ubuntu/.ethereum/testnet/ 

戻り/home/ubuntu/.ethereum/testnet/読み込むことができません。

を私は 'Ubuntuの' グループに 'tomcat8' ユーザを追加する場合でも
ls: cannot access '/home/ubuntu/.ethereum/testnet/': Permission denied 

$members ubuntu 

は今返します

ubuntu tomcat8 

$ ls -l /home/ubuntu/.ethereum/testnet/ 

リターン:

total 8 
drwxr--r-- 5 ubuntu ubuntu 4096 Jun 17 17:33 geth 
srw------- 1 ubuntu ubuntu 0 Jun 18 14:08 geth.ipc 
drwxr--r-- 2 ubuntu ubuntu 4096 Jun 18 03:11 keystore 

しかしtomcat8、まだ読んだことがありませんアクセスを

を/home/ubuntu/.ethereum/testnet/します

別のディレクトリ(ユーザー 'tomcat8'がアクセスできる場所)にファイルを移動すると、probl em。しかし、私はまだ問題がどこにあるのか理解していません。一般的には、サーブレットから/home/ubuntu/.ethereum/testnet/ファイルへのアクセス権を持っています。

答えて

1

これは基本的なアクセス許可の問題です。

このファイルがubuntuユーザーのホームディレクトリの下にあるかのように見えます。その場合、権限を変更することは悪い考えです。より良い選択肢は、特定のユーザのホームディレクトリの外にこれらのファイルの格納場所を移動するか、それらのファイルをtomcatユーザのホームディレクトリに移動することです。

それ以外の場合は、何をする必要があるとそれに応じてアクセス許可を与える、とTomcatのプロセスが実行されているユーザーを見つけるです:

sudo chown tomcat:tomcat /home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00 
#OR 
sudo chmod a+r /home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00 
#OR grant folder access if files are dynamically generated 
sudo chmod -R a+r /home/ubuntu/.ethereum/testnet/keystore/ 

上記のコードを実行するユーザーのTomcatがtomcat命名されていると仮定。

1

パス内のすべてのディレクトリのアクセス権を確認してください。特定のチェックで

/home/ubuntu/

ファイルが読み取り可能かどうかを確認するために、これを試してみてください。

File f = new File("/home/ubuntu/.ethereum/testnet/keystore/UTC--2017-06-18T03-11-13.235052023Z--6c992fb9531c9285ca9aba80c32a63074b0acd00"); 

if (f.canRead()) { 
    System.out.println("is Readable"); 
} 
関連する問題