내 사용자 지정 보안 관리자는 현재 SIGTERM 때문에 정상적인 종료를 차단합니다.SecurityManager에서 SIGTERM 사용
을 종료 후속 메시지가 표시됩니다자바 핫스팟 (TM) 64 비트 서버 VM 경고 :이 java.lang.SecurityException가 VM을 핸들러 -하는 신호 SIGTERM을 파견 발생한 예외가해야 할 수도 있습니다 강제
SIGTERMS로 인해 종료가 가능하도록하려면 어떻게해야합니까?
내 사용자 지정 보안 관리자는 현재 SIGTERM 때문에 정상적인 종료를 차단합니다.SecurityManager에서 SIGTERM 사용
을 종료 후속 메시지가 표시됩니다자바 핫스팟 (TM) 64 비트 서버 VM 경고 :이 java.lang.SecurityException가 VM을 핸들러 -하는 신호 SIGTERM을 파견 발생한 예외가해야 할 수도 있습니다 강제
SIGTERMS로 인해 종료가 가능하도록하려면 어떻게해야합니까?
-Djava.security.debug=all
의 코드를 생략하면 전체 디버깅 정보가 비활성화되어 아마 super.checkAccess
으로 호출됩니다. 당신이 당신의 SecurityManager
구현
public void checkAccess(ThreadGroup g) {
System.out.println("Access for " + g);
super.checkAccess(g);
}
public void checkAccess(Thread t) {
System.out.println("Access for " + t);
super.checkAccess(t);
}
먼저 작성하고 -Djava.security.debug=all
으로 실행하는 경우, 당신은 당신의 정책 파일에 추가 checkAccess
수 있도록 전화 및 권한에 대한 정보를 얻을 수 있습니다. I 요약 : 당신의 java.security.policy
파일에 부여
public void checkAccess(ThreadGroup g) {
System.out.println("Access for " + g);
if ("system".equals(g.getName())) {
// will checkPermission java.lang.RuntimePermission "modifyThreadGroup"
super.checkAccess(g);
} else {
throw new SecurityException("Access denied to " + g);
}
}
public void checkAccess(Thread t) {
System.out.println("Access for " + t);
if ("SIGTERM handler".equals(t.getName())) {
// will checkPermission java.lang.RuntimePermission "modifyThread"
super.checkAccess(t);
} else {
throw new SecurityException("Access denied to " + t);
}
}
또한 이러한 권한 :
결과Access for java.lang.ThreadGroup[name=system,maxpri=10]
Permission (java.lang.RuntimePermission modifyThreadGroup)
[...]
Access for Thread[SIGTERM handler,9,system]
Permission (java.lang.RuntimePermission modifyThread)
[...]
[email protected] (
(java.lang.RuntimePermission exitVM)
(java.io.FilePermission /path/to/current/working/directory/- read)
)
, 당신이 당신의 SecurityManager
에 다음 코드로 엄격한 방식으로 처리 SIGTERM
신호를 가능하게
grant {
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "exitVM";
};
자세한 내용은 here을 참조하십시오.하지만 실제로 시도하는 것은 분명하지 않습니다. try-a nd-fix 방법은 여전히 가장 빠른 방법입니다.
SecurityManager가 해당 예외의 원인이되는 검사 방법을 알고 계십니까? CheckPermission (java.lang.RuntimePermission shutdownHooks) –
죄송합니다. 2 개의 다른 사용자 : checkAccess()와 "system"스레드 그룹을 사용하고 checkAccess()를 " 시스템 "스레드 그룹. SecurityManager가 이러한 액세스를 방지합니까? –
현재 모든 것이 비활성화되어 있습니다. –