0

データベースのいくつかのクラスで使用するために、Domino サーバーの jvm/lib/ext フォルダーにいくつかの jar を入れました。セキュリティ以外はすべて機能します。

「パーミッションjava.security.AllPermission;」を配置すると (引用符なし) java.policy のメイン許可では、すべてが機能しますが、クラスを含むデータベースと ext フォルダー内の jar のみに対する別の許可に絞り込もうとすると、あらゆる種類の許可を受け取ります。セキュリティ例外。たとえば、jar の 1 つがリフレクションを実行しているため、リフレクション例外を受け取ります。

ファイルで一緒に使用しようとした 2 つの個別の許可を次に示します。

grant codeBase "file:/C:/path_to_domino_server_program_directory/jvm/lib/ext/-" {
     permission java.security.AllPermission;
}
grant codeBase "xspnsf://server:0/path_to_database/database.nsf/-" { 
     permission java.security.AllPermission;
};

どんな助けでも大歓迎です。

4

2 に答える 2

2

/ lib / extの権限はすでにデフォルトのポリシーファイルに含まれているため、これらの権限には触れないでください。

 // Standard extensions get all permissions by default
 grant codeBase "file:${java.home}/lib/ext/*" {
       permission java.security.AllPermission;
 };

したがって、図書館はすでにすべての権利を持っています。しかし、Thimoが指摘したように、クラスローダーは邪魔になる可能性があります。ソースを調べて、トラブルメーカーを確認する必要がある場合があります。主な候補は反射使用です。

Apache POIの場合、かなりの旅が必要です。クリスチャンは彼のブログで解決策の概要を説明しました(常に読む価値があります)。

追加のライブラリを自分の拡張ライブラリにパックして、updatesite.nsf(に投資)を使用して展開できるようにします。

于 2013-02-18T09:11:16.863 に答える
1

これをPOIに使用しています:

grant { 
  permission java.lang.RuntimePermission "getClassLoader"; 
}

何をするかによっては、他の権限も必要になるかもしれませんが、すべての権限を付与することはお勧めできません。もちろん、アクセス許可を 1 つの NSF だけに制限できればさらに良いのですが、面倒そうです。サーバーに何を使用する必要があるかは完全にはわかりませんが、これを正しく理解していれば、サーバー名ではなく「サーバー」にする必要があります。

yourdatabase.nsf のみを変更する必要があります。他の部分は静的であり、ディレクトリの区切り文字はプラットフォームに関係なく / です。場所はデータ ディレクトリに対して相対的であり、codeBase 値全体は (ファイル名に関係なく) 小文字にする必要があります。

また、jvm/ext から JAR を削除し、それらを NSF WEB-INF に保存して、NSF パーミッションが確実に使用されるようにすることもできます。

java.policy ファイルを変更した後は、HTTP の再起動が必要であることに注意してください (おそらく既にご存じでしょう)。

于 2013-02-18T10:08:58.590 に答える