首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析JAAS的示例程序

分析JAAS的示例程序
EN

Stack Overflow用户
提问于 2012-08-23 22:43:50
回答 1查看 287关注 0票数 0

我正在尝试分析JAAS的一个示例程序,它在这里。(http://www.devx.com/getHelpOn/Article/9915/0/page/4)。我下载了代码并运行它。无需分析,它就可以运行得很好。运行该程序的命令如下所示:

代码语言:javascript
复制
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 agent运行它(来分析它)时,它给出了如下异常:

代码语言:javascript
复制
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 profiler,它根本没有被广泛使用。它正确地分析了其他java程序/应用程序,但不是这个。

我使用以下命令来运行示例JAAS程序和profiler:(Pl注意,它是从脚本文件复制的)

代码语言:javascript
复制
 **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  

谁能告诉我为什么抛出指定的异常,为什么我的分析器不产生输出?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-23 23:06:57

您已启用SecurityManager (-Djava.security.manager)并指定了特定的安全策略(-Djava.security.policy==SimpleJAAS.policy)。您的代理代码违反了该安全策略,因此会失败。您需要向策略文件添加一个授权部分,以允许代理执行其需要执行的操作。

出于测试目的,您可以在安全策略中添加类似以下内容(将允许代理执行它想做的任何操作):

代码语言:javascript
复制
grant codeBase "file:lib/jborat-agent.jar" {
  permission java.security.AllPermission;
};

您可能需要调整codeBase行,以包含所有必要的jars。

显然,在真正安全的应用程序中,您可能不希望这样做,而是授予代理执行所需的最低权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12094265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档