1

ファイルを読み取るには、ユーザー名とパスワードを使用して https URL に接続する必要があります。サーバーに接続できません (以下のエラー ログを参照してください)。私は Java の経験があまりないので、このコードについて助けが必要です。

import lotus.domino.*;
import java.net.*;
import java.io.*;
import javax.net.ssl.HttpsURLConnection;

public class JavaAgent extends AgentBase {

public void NotesMain() {

  try {
    String username = "123";
    String password = "456";
    String input = username + ":" + password;
    String encoding = new sun.misc.BASE64Encoder().encode (input.getBytes());

    //Open the URL and read the text into a Buffer
    String urlName = "https://server.org/Export.mvc/GetMeetings?modifiedSince=4/9/2010";
    URL url = new URL(urlName);
    HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();

    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestProperty("Content-Length", String.valueOf (encoding.length())); 
    connection.setUseCaches(false);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setAllowUserInteraction(true);
    connection.setRequestProperty("Authorization", "Basic " + encoding);
    connection.setRequestProperty("Cookie", "LocationCode=Geneva");

    connection.connect();

    BufferedReader rd = null;
      try{
        rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      } catch (IOException e) {
        System.out.println("Read failed");
        System.exit(-1);
      }

    String line;
    while((line = rd.readLine()) != null) {
      System.out.println(line.toString());
    }
    rd.close();

    connection.disconnect();

  } catch(Exception e) {
    e.printStackTrace();
  }
}
}

スローされた例外:

java.security.AccessControlException: Access denied (java.lang.RuntimePermission exitVM.-1)
 at java.security.AccessController.checkPermission(AccessController.java:108)
 at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
 at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.java:1311)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1611)
 at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
 at java.lang.SecurityManager.checkExit(SecurityManager.java:744)
 at java.lang.Runtime.exit(Runtime.java:99)
 at java.lang.System.exit(System.java:275)
 at JavaAgent.NotesMain(Unknown Source)
 at lotus.domino.AgentBase.runNotes(Unknown Source)
 at lotus.domino.NotesThread.run(Unknown Source)
4

4 に答える 4

2

古いスレッドですが、私はそれに遭遇したので、ここに更新された答えがあります。

答えはスタックトレースにあります。これはDominoの使用に関連している可能性がありますが、これは、標準のJavaブラウザプラグインから呼び出される通常のJVMで使用される非常に単純なアプレットで発生する一般的な問題であり、Javaエージェントがアプレットサンドボックスを使用しているようです。

アプレットは、いくつかの重要な呼び出しを実行することを許可されていません(クライアントマシンでJavaセキュリティポリシーを直接変更する場合を除く)。署名されたアプレットを使用している場合でも。

あなたの場合、System.exit(-1)は例外をトリガーしています。この理由は、アプレットのライフサイクルがかなり複雑であり、それをいじくり回すことは想定されていないためです。ブラウザがアプレットと対話し、アプレットを実行するために起動されたJVMプロセスを破棄(または再利用)できるようにする必要があるため、これはあなた自身の利益になります。他の人を呼び出すことによってSystem.exit()、あなたはこのライフサイクルとアプレットの破壊を制御するブラウザのチャンスを台無しにするでしょう。

おそらくそこで呼び出しを呼び出す必要がないので、なぜこれが完全に必要なのかを再検討することをお勧めしますSystem.exit()

于 2012-11-05T10:48:59.443 に答える
1

これはJavaエージェントだと思いますか?確認事項。

  1. セキュリティレベルがあなたがしたいことのために設定されているエージェントのプロパティで。通常、ファイル アクセスには少なくともレベル 2 が必要です。

  2. エージェントの署名、またはエージェントを実行するように設定されているユーザーは、サーバー上での実行を許可されています。

  3. java.policy ファイルを変更して、特定の制限されたクラスへのアクセスを許可できます。(ただし、変更を行う理由を知る必要があります)。

http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html

于 2010-04-16T11:35:56.417 に答える
0

IBM からのこのサポート スレッドは、8.5 の Domino サーバーで実行している場合の問題に似ているように聞こえます。

于 2010-04-19T08:07:24.727 に答える
0

アプレットは、ロード元のサーバーにのみアクセスできます。おそらく、接続しようとしているサーバーからアプレットがロードされていませんか?

編集: スタック トレースは、専用のセキュリティ マネージャーがインストールされていることを示唆しています (COM.ibm.JEmpower.applet.AppletSecurity)。このクラスをグーグルで検索すると、問題が明らかになります: http://lekkimworld.com/2006/02/28/imported_java_agent.html

于 2010-04-14T08:29:11.873 に答える