0

ここにあるJAASのサンプルプログラムのプロファイルを作成しようとしています(http://www.devx.com/getHelpOn/Article/9915/0/page/4)。コードをダウンロードして実行しました。プロファイリングがなくても問題なく動作します。そのプログラムを実行するコマンドは次のようになります。

java -cp SimpleAction.jar:SimpleAuthz.jar:SimpleLogMod.jar -Djava.security.manager -Djava.security.policy==SimpleJAAS.policy -Djava.security.auth.login.config==SimpleJAAS.config  com.gabhart.security.SimpleAuthz 

しかし、Javaエージェントで実行しようとすると(プロファイルを作成するため)、次のような例外が発生します。

java.security.AccessControlException: access denied (java.util.PropertyPermission ch.usi.dag.jborat.liblist read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
    at java.lang.System.getProperty(System.java:650)
    at ch.usi.dag.jborat.agent.JavaAgent.premain(JavaAgent.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)

ただし、プログラムは正常に実行されますが、プロファイラーは出力を生成しません。あまり広く使われていないJavaプロファイラーを使っています。他のJavaプログラム/アプリケーションを適切にプロファイリングしますが、これはプロファイリングしません。

次のコマンドを使用して、プロファイラーと一緒にサンプルJAASプログラムを実行します:(スクリプトファイルからコピーされることに注意してください)

 **java  -javaagent:lib/jborat-agent.jar \
     -Dch.usi.dag.jborat.exclusionList="conf/exclusion.lst" \
      -Dch.usi.dag.jborat.liblist="conf/lib.lst" \
       -Dch.usi.dag.jp2.outputFilePrefix="JAAZexample_output" \
       -Dch.usi.dag.jborat.instrumentation="ch.usi.dag.jp2.instrument.AddInstrumentation" \
       -Dch.usi.dag.jp2.dumpers="ch.usi.dag.jp2.dump.xml.XmlDumper" \
         -Dch.usi.dag.jborat.codemergerList="conf/codemerger.lst" \
          -Xbootclasspath/p:./lib/Thread_JP2.jar:lib/jborat-runtime.jar:lib/jp2-runtime.jar/jp2.jar/jborat-agent.jar/jborat.jar**:SimpleAction.jar:SimpleAuthz.jar:SimpleLogMod.jar \
          -Djava.security.manager -Djava.security.policy==SimpleJAAS.policy \
          -Djava.security.auth.login.config==SimpleJAAS.config  com.gabhart.security.SimpleAuthz  

指定された例外がスローされる理由と、プロファイラーが出力を生成しない理由を誰かに教えてもらえますか?

ありがとう。

4

1 に答える 1

0

SecurityManager(-Djava.security.manager)を有効にし、特定のセキュリティポリシー(-Djava.security.policy == SimpleJAAS.policy)を指定しました。エージェントのコードはそのセキュリティポリシーに違反しているため、失敗します。エージェントが必要なことを実行できるようにするには、ポリシーファイルに許可セクションを追加する必要があります。

テストの目的で、セキュリティポリシーに次のようなものを追加することができます(エージェントがやりたいことを何でもできるようになります)。

grant codeBase "file:lib/jborat-agent.jar" {
  permission java.security.AllPermission;
};

必要なすべてのjarを含めるには、codeBase行を微調整する必要がある場合があります。

明らかに、真に安全なアプリケーションでは、おそらくそれを実行したくないでしょうが、代わりに、エージェントに実行に必要な最小限の特権を付与します。

于 2012-08-23T15:06:57.393 に答える