2012-08-23 2 views
0

여기 JAAS 샘플 프로그램을 프로파일 링하려고합니다. (http://www.devx.com/getHelpOn/Article/9915/0/page/4). 코드를 다운로드하고 실행했습니다. 프로파일 링을하지 않으면 정상적으로 실행됩니다. 나는 (그것을 프로필) 자바 에이전트를 실행하려고 할 때, 그것은 다음과 같이 나에게 예외를 제공JAAS 예제 프로그램 프로파일 링

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.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 프로그램/응용 프로그램을 올바르게 프로파일하지만이 프로파일은 아닙니다.

나는 프로파일 러와 함께 샘플 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 

지정된 예외가 발생하는 이유 누군가가 말해 주시겠습니까 이유 내 프로 파일러에서 출력물을 생성하지 않습니까?

감사합니다.

답변

0

SecurityManager (-Djava.security.manager)를 활성화하고 특정 보안 정책 (-Djava.security.policy == SimpleJAAS.policy)을 지정했습니다. 에이전트 코드가 해당 보안 정책을 위반하여 실패합니다. 에이전트가 필요한 작업을 수행 할 수 있도록 권한 부여 섹션을 정책 파일에 추가해야합니다. 테스트 목적으로

, 당신은 아마 (에이전트가 원하는 무엇이든 할 수 있습니다) 보안 정책이 뭔가를 추가 할 수 있습니다

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

당신이 모든을 얻을 수있는 코드베이스 라인을 조정할 필요가 있습니다 필요한 병이 포함되어 있습니다.

진정한 보안 응용 프로그램에서는 분명히 그렇게하고 싶지는 않지만 에이전트에게 실행에 필요한 최소 권한을 부여하는 것이 분명합니다. 그 후

+0

, 내가 얻을이 : sun.reflect.NativeConstructorAccessorImpl.newInstance0 (기본 방법) sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance에서 \t (DelegatingConstructorAccessorImpl에서 \t 된 .java 27) java.lang.reflect.Constructor.newInstance (Constructor.java:513)에서 \t의 java.lang.Class에서 java.lang.Class.newInstance0 (Class.java:355) \t에서 \t. newInstance (Class.java:308) \t (ch.usi.dag.jborat.agent.JavaAgent.premain (JavaAgent.java:22) )at sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 메소드) – user523956

+0

@ user523956 - 해당 스택 추적에 예외가 있습니까? – jtahlborn

+0

그것은 "bla bla에서 java.lang.ExceptionInInitializerError"라고 말합니다 .... 어떤 생각입니까? – user523956

관련 문제